SQL中是否有类似前缀/后缀增量运算符或模拟其行为的方法?理想情况下,我可以做类似的事情:
declare @count int = 0
cast(@count++ as varchar)
所需的输出将为“0”,此后每次都会增加一个。
这是我问题的简单表示。
select
case when x is not null then cast(@count++ as varchar) + ' more text' else '' end +
case when y is not null then cast(@count++ as varchar) + ' more text' else '' end +
case when z is not null then cast(@count++ as varchar) + ' more text' else '' end +
--and so on
无论哪个列是null
,我都需要显示0,1,2,3 ...等。
答案 0 :(得分:3)
关于评论中的问题。你可以使用像
这样的东西SELECT *,
(SELECT CAST(ROW_NUMBER() OVER (ORDER BY Ord) AS VARCHAR(10)) + ' more text '
FROM (VALUES (1,low),
(2,high),
(3,number)) V(Ord, Col)
WHERE Col IS NOT NULL
FOR XML PATH(''), TYPE).value('.','varchar(max)') AS txt
FROM master..spt_values
关于问题中的问题。使用自己的变量
是不可能的我的第一个想法是使用序列代替。
CREATE SEQUENCE S START WITH 1 INCREMENT BY 1 ;
GO
SELECT NEXT VALUE FOR S; -- Increments and returns value
SELECT NEXT VALUE FOR S; -- Increments and returns value
使用变量执行类似操作的一种hacky方法是将其传递给具有单行的虚拟表。虽然可以很容易地从这个例子中删除变量的使用,而不是直接使用单行的列值作为计数器。
/*Setup*/
DECLARE @T TABLE(X INT);
INSERT INTO @T DEFAULT VALUES;
DECLARE @Counter INT = 0;
/*Increment variable and return result*/
UPDATE @T SET @Counter = X = @Counter + 1
OUTPUT INSERTED.X
/*Increment variable and return result*/
UPDATE @T SET @Counter = X = @Counter + 1
OUTPUT INSERTED.X
答案 1 :(得分:0)
我不确定你想要什么,但如果你想要一个类似计数器的东西,也许你可以尝试使用row_number()
功能:
select
cont -1 as count
from
(
select
row_number() over (order by number) as cont
from
(select 100 as number union all
select 100 as number union all
select 100 as number) t0
) t1
使用您的表格更改我设置的示例。你将得到一个从0开始直到你的表行数的计数器。