我正在嘗試使用 count() 和子查詢在 Oracle 中執行此操作,但是我無法實作我想要的目標,并且我沒有看到任何有關相同問題的問題。
所以我有這張表:
身份狀態 --------------- 1 安 1 安 1 乙 2A 2 乙 2 C 3A 3 C 3 C
我想要這樣的東西:
身份證ABC --------- - - - 1 2 1 0 2 1 1 1 3 1 0 2
因此,按 ID 分組并通過“ID”顯示每種“狀態”的數量。也許我需要一個程式?我可以用一個簡單的查詢來做到這一點嗎?
提前致謝。
uj5u.com熱心網友回復:
你可以嘗試旋轉它們。
SELECT *
FROM (
SELECT ID, STATUS
FROM yourtable
) src
PIVOT (
COUNT(*)
FOR STATUS IN ('A' A, 'B' B, 'C' C)
) pvt;
uj5u.com熱心網友回復:
SELECT C.ID,
SUM(
CASE
WHEN C.STATUS='A' THEN 1
ELSE 0
END) COUNT_A,
SUM(
CASE
WHEN C.STATUS='B' THEN 1
ELSE 0
END) COUNT_B,
SUM(
CASE
WHEN C.STATUS='C' THEN 1
ELSE 0
END) COUNT_C
FROM YOUR_TABLE C
GROUP BY C.ID;
它被稱為“條件聚合”。請看一下上面的查詢是否適合您
uj5u.com熱心網友回復:
您需要條件聚合。我更喜歡這個縮寫版本:
SELECT ID, COUNT(CASE WHEN STATUS = 'A' THEN 1 END) AS A,
COUNT(CASE WHEN STATUS = 'B' THEN 1 END) AS B,
COUNT(CASE WHEN STATUS = 'C' THEN 1 END) AS C
FROM yourTable
GROUP BY ID;
uj5u.com熱心網友回復:
PIVOT 子句非常適合這種情況。
select *
from t
pivot (
count(status) for status in (
'A' as A
,'B' as B
,'C' as C
)
)
;
演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/341140.html
