iT邦幫忙

0

Oracle sql developer : 分組問題

我想用以下資料做分組, 總共有3個欄位,
C1是流水號, C2是ID, C3是對應的項目,
分組的概念是C3欄一有變動就變下一組,
我的困難點在於第4列c3仍有可能A,
導致我用單純的partition by 4,5列會判斷錯誤,
想了很久都想不到方法, 也不知道用什麼關鍵字搜尋,
懇請大神幫忙!

參考資料:

c1, c2, c3 期望分組結果
1, A12, A ->1
2, A12, A ->1
3, A12, B ->2
4, A12, A ->3
5, A12, A ->3
6, B11, B ->4
7, B11, B ->4

1 個回答

0
rogeryao
iT邦大師 1 級 ‧ 2021-09-03 17:10:41
最佳解答
CREATE TABLE TX(
C1 number(10),
C2 varchar2(50),
C3 varchar2(50));
INSERT INTO TX (C1,C2,C3)
VALUES (1,'A12','A');
INSERT INTO TX (C1,C2,C3)
VALUES (2,'A12','A');
INSERT INTO TX (C1,C2,C3)
VALUES (3,'A12','B');
INSERT INTO TX (C1,C2,C3)
VALUES (4,'A12','A');
INSERT INTO TX (C1,C2,C3)
VALUES (5,'A12','A');
INSERT INTO TX (C1,C2,C3)
VALUES (6,'B11','B');
INSERT INTO TX (C1,C2,C3)
VALUES (7,'B11','B');
SELECT M.C1,M.C2,M.C3,1+SUM(M.Y) OVER (ORDER BY M.C1) AS D
FROM (
SELECT TX.*,
CASE WHEN C2=LAG(C2,1,C2) OVER (ORDER BY C1) AND C3=LAG(C3,1,C3) OVER (ORDER BY C1) THEN 0 ELSE 1 END AS Y
FROM TX) M
ORDER BY M.C1

Demo

rogeryao iT邦大師 1 級 ‧ 2021-09-03 18:49:16 檢舉

只判斷 C3 欄的變動時,去除 【C2=LAG(C2,1,C2) OVER (ORDER BY C1) AND 】即可。

我要發表回答

立即登入回答