如何将变量设置为Ms Sql select

val*_*imo 19 sql-server variables select

如何设置MS Sql选择变量,想法如下:

Declare @var int

SET @var = 0;

Select (if(idid = @var) then sum+1 else sum-1) AS Sum,
   set @var = id 
FROM table
Run Code Online (Sandbox Code Playgroud)

根据评论进行编辑.

DECLARE @T TABLE
(
ID  INT PRIMARY KEY,
IDID INT,
SUMM INT 
)

INSERT INTO @T
SELECT 1,1,4 UNION ALL
SELECT 2,1,5 UNION ALL 
SELECT 3,2,6 UNION ALL 
SELECT 4,2,7 UNION ALL 
SELECT 5,3,8
Run Code Online (Sandbox Code Playgroud)

在选择结果我需要:

ID  IDID  SUMM 
--  ----  ----
1   1     4 
2   1     0 
3   2     6 
4   2     0 
5   3     8
Run Code Online (Sandbox Code Playgroud)

Ken*_*enL 21

这是你想要做的吗?

Declare @var int, @id int
SET @var = 0

SELECT @id = id FROM Table t

if(@id = @var)
BEGIN
    SET @var = @var + 1
END
ELSE
BEGIN
    SET @var = @var - 1
END

print @var
Run Code Online (Sandbox Code Playgroud)


Pau*_*lor 6

只需使用SELECT.

例如

SELECT @myValue = MyField FROM MyTable WHERE ....
Run Code Online (Sandbox Code Playgroud)

  • @valisimo - 请提供您的表结构和示例数据来解释您的需求,而不是无效SQL的片段. (7认同)

And*_*y M 5

虽然像其他人一样,我并不真正理解,但下面的查询会产生原始帖子中指定的输出(反过来,它是从您的评论中派生出来的).这需要SQL Server 2005或更高版本.

WITH cte AS (
  SELECT
    ID,
    IDID,
    SUMM,
    RowNum = ROW_NUMBER() OVER (PARTITION BY IDID ORDER BY ID)
  FROM @T
)
SELECT
  ID,
  IDID,
  SUMM = CASE RowNum WHEN 1 THEN SUMM ELSE 0 END
FROM cte
Run Code Online (Sandbox Code Playgroud)

基本上,SUMM输出列包含SUMM原始表,如果这是第一次出现的IDIDorder by ID,否则列包含0.

不确定它与你所追求的有多远,但也许它可以帮助你更准确地解释你的问题.