在查询结果中添加ID列
这是我第一次问一个关于T-SQL的问题,我是一个初学者。我有一个SQL查询,其中包含两个CTE的筛选到少于10行。我使用的是SUM语句获取的运行总计:在查询结果中添加ID列
Sum(Diff) OVER(ORDER BY DateAdded) AS Summary
DateAdded
有几行相同的值。因此,它不会为每一行提供总计运行总数。我需要创建一个只计算行数的字段(类似于DB表中的PK),所以我可以将其用于我的ORDER BY
子句。如果我的理解是正确的,那么这就是我需要做的工作。如何将枚举列添加到查询结果集?请注意,我不想ALTER
一个表,只是添加一列到查询结果。我希望我写的很清楚。谢谢!
而不是使用count()
或sum()
可以使用row_number(),这将给一个不同的行号,从1开始,在每一行的你结果集:
SELECT ROW_NUMBER() OVER (ORDER BY dateAdded) as Summary
我相信你可以再补充NEWID()
您ORDER BY
:
SELECT SUM(diff) OVER (ORDER BY DateAdded, NEWID()) AS Summary
这工作,但它以某种方式改变了行顺序。 – Brian
@onedaywhen他说了很多东西。我回答了实际问题,而不是他的帖子末尾的具体问题。根据我的经验,这往往更有用,而不是迂腐。 –
@Brian如果你想保留一个特定的行顺序,那么你应该在你的查询中有一个'ORDER BY'(而不仅仅是'OVER'子句)。这不会以任何方式影响。 –
试试这个:
DECLARE @Result TABLE
(
DT DATETIME
)
INSERT INTO @Result SELECT '1 Jan 1900'
INSERT INTO @Result SELECT '1 Jan 1900'
SELECT ROW_NUMBER() OVER(ORDER BY DT DESC) AS "Row Number", DT
FROM @Result
Count和Sum是两个非常不同的东西 – Adam
“一个简单计数行数的字段(类似于DB表中的PK)” - 嗯,这不是一个键的定义。 – onedaywhen
我明白。我说的没有试图去定义一个PK。我只是用它来说明输出应该是什么样子。抱歉! – Brian