1
我試圖找到一種基於組的計數方法,我無法找出一種方法而無需使用遊標。由於使用光標會比較慢,所以我希望可能有更好的方法。SQL SERVER COUNT LEAD條件組BY
+----+--------+-------+--------+
| ID | NEXTID | RowNo | Status |
+----+--------+-------+--------+
| 1 | 2 | 1 | 1 |
| 2 | 3 | 1 | 1 |
| 3 | 4 | 1 | 0 |
| 4 | | 1 | 1 |
| 1 | 2 | 2 | 0 |
| 2 | 3 | 2 | 1 |
| 3 | 4 | 2 | 1 |
| 4 | | 2 | 1 |
| 1 | 2 | 3 | 1 |
| 2 | 3 | 3 | 1 |
| 3 | 4 | 3 | 1 |
| 4 | | 3 | 1 |
+----+--------+-------+--------+
我現在希望計算組狀態列導致:
簡化爲數據結構
+-----+-------------+
| Row | StatusCount |
+-----+-------------+
| 1 | 2 |
| 1 | 1 |
| 2 | 3 |
| 3 | 4 |
+-----+-------------+
用於測試目的我創建了下面的代碼:
SELECT
ID,
NEXTID,
RowNo,
Status,
LEAD(ID,1,0)
OVER (ORDER BY RowNo,ID) AS LEADER
INTO #TestTable
FROM
(
VALUES
(1, 2, 1, 1),
(2, 3, 1, 1),
(3, 4, 1, 0),
(4, '', 1, 1),
(1, 2, 2, 0),
(2, 3, 2, 1),
(3, 4, 2, 1),
(4, '', 2, 1),
(1, 2, 3, 1),
(2, 3, 3, 1),
(3, 4, 3, 1),
(4, '', 3, 1)
)
AS TestTable(
ID,
NEXTID,
RowNo,
Status);
GO
SELECT
RowNo,
Count(Status) AS StatusCount
FROM #TestTable
WHERE
Status = 1
GROUP BY
RowNo
此結果
+-----+-------------+
| Row | StatusCount |
+-----+-------------+
| 1 | 3 |
| 2 | 3 |
| 3 | 4 |
+-----+-------------+
不分隔第一行。我意識到我需要另一個GROUP BY條件,但我無法弄清楚適當的條件。
非常感謝您的幫助。如果這已經得到解答,我無法找到主題和提示也將不勝感激。
隨着親切的問候 freubau
非常感謝您的代碼片段。我試過了,它給了我期望的結果。我不明白它是如何工作的,但我確信在閱讀使用的語法時我最終能夠做到。 – freubau
@freubau。 。 。子查詢,看看'grp'是如何計算的。 –
再次感謝您的幫助。我覺得沒有提出完美描述我正在嘗試做什麼的術語分區這種說法很愚蠢。無論如何,我能夠取代目前使用的光標功能,它的使用時間超過了十倍。 – freubau