1
그룹을 기준으로 계산하는 방법을 찾으려고하고 커서를 사용하지 않고도 방법을 찾아 낼 수 없었습니다. Cursor를 사용하면 상대적으로 느려지므로 더 나은 방법이있을 수 있기를 바랍니다.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 |
+----+--------+-------+--------+
내가 지금의 결과 그룹에서 상태 열을 COUNT 할 : 다음과 같이
데이터가 구성되어 단순화 된 : 테스트 목적으로 나는 다음과 같은 코드를 작성하기위한+-----+-------------+
| 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'가 어떻게 계산되는지보십시오. –
다시 도움 주셔서 감사합니다. 내가 뭘하려고했는지 완벽하게 묘사하는 용어 파티션을 생각지 않는다는 것에 어리 석다. 어쨌든 나는 현재 사용중인 Cursor 기능을 10 번 이상 대체 할 수있었습니다. – freubau