2017-10-20 151 views
0

我有一張表格,包含糖尿病,高血壓,心力衰竭等6種不同條件下的近百萬份索賠記錄。每個成員都有一些索賠。他可能會聲稱患有糖尿病或高血壓或其他疾病。我的目標是將每個成員行的條件(索賠數量)分組。使用左外連接的每個ID的SQL組行數

現有的表

+--------------+---------------+------+------------+ 
| Conditions | ConditionCode | ID | Member_Key | 
+--------------+---------------+------+------------+ 
| DM   |   3001 | 1212 | A1528  | 
| HTN   |   5001 | 1213 | A1528  | 
| COPD   |   6001 | 1214 | A1528  | 
| DM   |   3001 | 1215 | A1528  | 
| CAD   |   8001 | 1823 | B4354  | 
| HTN   |   5001 | 3458 | B4354  | 
+--------------+---------------+------+------------+ 

所需的結果

+------------+------+-----+----+----+-----+-----+ 
| Member_Key | COPD | CAD | DM | HF | CHF | HTN | 
+------------+------+-----+----+----+-----+-----+ 
| A1528  | 1 |  | 2 | |  | 1 | 
| B4354  |  | 1 | | |  | 1 | 
+------------+------+-----+----+----+-----+-----+ 

查詢

select distinct tr.Member_Key,C.COPD,D.CAD,DM.DM,HF.HF,CHF.CHF,HTN.HTN 
    FROM myTable tr 
    --COPD 
    left outer join (select Member_Key,'X' as COPD 
    FROM myTable 
    where Condition=6001) C 
    on C.Member_Key=tr.Member_Key 
    --CAD 
    left outer join (.... 

現在我只是使用'X'。但我試圖根據條件獲得索賠數量來代替X.我不認爲使用左外連接在搜索100萬行並執行截然不同時效率更高。你有什麼其他的辦法解決這個

+2

熟悉旋轉功能。 –

+0

嗯...... PIVOT似乎並不需要像這樣的情況。 @KrzysztofKaszkowiak – Hogan

+0

你說得對。如果條件數量沒有變化,那麼PIVOT是不必要的。 –

回答

4

你不想這麼多的子查詢,這很容易與GROUP BY和case語句:

SELECT Member_Key 
     SUM(CASE WHEN Condition=6001 THEN 1 ELSE 0 END) AS COPD,    
     SUM(CASE WHEN Condition=3001 THEN 1 ELSE 0 END) AS DM, 
     SUM(CASE WHEN Condition=5001 THEN 1 ELSE 0 END) AS HTN, 
     SUM(CASE WHEN Condition=8001 THEN 1 ELSE 0 END) AS CAD 
FROM myTable 
GROUP BY Member_Key 
2

這是CASE statments理想的情況下:

SELECT tr.Member_Key, 
    SUM(CASE WHEN Condition=6001 THEN 1 ELSE 0 END) as COPD, 
    SUM(CASE WHEN Condition=6002 THEN 1 ELSE 0 END) as OtherIssue, 
    SUM(CASE etc.) 
FROM myTable tr 
GROUP BY tr.Member_Key 
+0

很好的答案 - 有一些錯別字,沒有定義tr alias。 – Hogan

0

這應該與PIVOT來完成,如:

SELECT * 
FROM 
(SELECT conditions, member_key 
FROM t) src 
PIVOT 
(COUNT (conditions) 
for conditions in ([COPD], [CAD], [DM], [HF], [CHF], [HTN])) pvt 
+0

看起來像條件​​碼是一個整數。條件是一個字符串 – kbball

+0

你是對的! – Hogan