在查询结果中添加ID列

问题描述:

这是我第一次问一个关于T-SQL的问题,我是一个初学者。我有一个SQL查询,其中包含两个CTE的筛选到少于10行。我使用的是SUM语句获取的运行总计:在查询结果中添加ID列

Sum(Diff) OVER(ORDER BY DateAdded) AS Summary 

DateAdded有几行相同的值。因此,它不会为每一行提供总计运行总数。我需要创建一个只计算行数的字段(类似于DB表中的PK),所以我可以将其用于我的ORDER BY子句。如果我的理解是正确的,那么这就是我需要做的工作。如何将枚举列添加到查询结果集?请注意,我不想ALTER一个表,只是添加一列到查询结果。我希望我写的很清楚。谢谢!

+0

Count和Sum是两个非常不同的东西 – Adam

+1

“一个简单计数行数的字段(类似于DB表中的PK)” - 嗯,这不是一个键的定义。 – onedaywhen

+0

我明白。我说的没有试图去定义一个PK。我只是用它来说明输出应该是什么样子。抱歉! – Brian

而不是使用count()sum()可以使用row_number(),这将给一个不同的行号,从1开始,在每一行的你结果集:

SELECT ROW_NUMBER() OVER (ORDER BY dateAdded) as Summary 
+0

如果他试图获得一个需要嵌套CTE的运行总数,以便他可以首先获取'ROW_NUMBER',然后在其下一个窗口集合(在这种情况下为'SUM')的ORDER BY中使用它。 –

+0

OP没有说他们想要一个总跑数,只是他们想要一个“一个只计算行数的字段”。 OP使用'SUM()'来做到这一点,但我并没有假设'Sum()'实际上是想要的。 – JNevill

+0

@TomH在理解我想要的内容时是正确的(也许我不清楚,我很抱歉)。 'ROW_NUMBER()'确实给了我正在寻找的东西(一个额外的枚举列)用于我的运行总数,我将使用它。 – Brian

我相信你可以再补充NEWID()ORDER BY

SELECT SUM(diff) OVER (ORDER BY DateAdded, NEWID()) AS Summary 
+0

这工作,但它以某种方式改变了行顺序。 – Brian

+0

@onedaywhen他说了很多东西。我回答了实际问题,而不是他的帖子末尾的具体问题。根据我的经验,这往往更有用,而不是迂腐。 –

+0

@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