2016-07-27 109 views
1

這是我第一次問一個關於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

回答

0

而不是使用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

-1

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

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

這工作,但它以某種方式改變了行順序。 – Brian

+0

@onedaywhen他說了很多東西。我回答了實際問題,而不是他的帖子末尾的具體問題。根據我的經驗,這往往更有用,而不是迂腐。 –

+0

@Brian如果你想保留一個特定的行順序,那麼你應該在你的查詢中有一個'ORDER BY'(而不僅僅是'OVER'子句)。這不會以任何方式影響。 –

0

試試這個:

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