我想合併一些行。SQL合併Oracle中的行
首先,我的表和數據如下
GRP CRRO_NO TYPE_CD TYPE_ID
PERSON 1111 FATHER Tom
PERSON 1111 MOTHER Jennifer
PERSON 1111 JOB_ Teacher
PERSON 1111 FRIEND Jimmy
PERSON 1111 FRIEND Kim
PERSON 1111 FRIEND Michael
存在的,我希望得到像
GRP CRRO_NO FATHER MOTHER JOB_ FRIEND
PERSON 1111 Tom Jennifer Teacher Jimmy
PERSON 1111 Tom Jennifer Teacher Kim
PERSON 1111 Tom Jennifer Teacher Michael
這種情況的結果是,如何寫SQL?
我一直喜歡
SELECT T1.GRP_CD GRP, T1.CRRO_NO CRRO
, MAX(T1.MOTHER) MOTHER, MAX(T1.FATHER) FATHER, MAX(T1.JOB_) JOB, T1.FRIEND FRIEND
FROM (
SELECT DISTINCT
GRP_CD
,CRRO_NO
,CASE WHEN TYPE_CD = 'FATHER' THEN TYPE_ID ELSE '' END FATHER
,CASE WHEN TYPE_CD = 'MOTHER' THEN TYPE_ID ELSE '' END MOTHER
,CASE WHEN TYPE_CD = 'JOB_' THEN TYPE_ID ELSE '' END JOB_
,CASE WHEN TYPE_CD = 'FRIEND' THEN TYPE_ID ELSE '' END FRIEND
FROM TMP
WHERE 1=1 AND TRIM(CRRO_NO) = '1111'
) T1
WHERE T1.CRRO_NO = '1111'
GROUP BY T1.GRP_CD, T1.CRRO_NO, T1.FRIEND
;
然後,SQL的結果上面
GRP CRRO_NO MOTHER FATHER JOB FRIEND
PERSON 1111 Jennifer Tom Teacher (null)
PERSON 1111 (null) (null) (null) Jimmy
PERSON 1111 (null) (null) (null) Kim
PERSON 1111 (null) (null) (null) Michael
現在我知道爲什麼我的查詢的結果是錯誤的(不是我想要),但我仍然找不到方法。
其實,有嚴格的規定分類哪一個會被複制(母親,父親,作業),且不會(朋友)
由於種種原因,我不能修改的結構我表。 (我已經從我的商業條件改變了這個問題的內容,並簡化了情況說明)
請提供任何意見再次嘗試
您是否嘗試過使用FRIEND列上的max將它從組中刪除? –
@JorgeCampos是的,我已經嘗試過,但行數應該是三,因爲有三個朋友。 – kdragon
然後你的解決方案將是你的實際查詢的內部連接,只需要像'select ...... where TYPE_CD ='FRIEND''這樣的朋友的子查詢,這個連接會給你3個結果......試試吧。 oooh並且不需要你的查詢中的'1 = 1'(我知道這可能來自一個懶惰程序員不希望檢查每個以前的條件= D的應用程序) –