2013-05-03 22 views
0

我想選擇兩個綁定到表的值,如果它們不存在,則填充空值。但是,我只希望每條記錄都有一行。如果我運行下面的查詢,CASE語句會創建重複的行。SQL在存在時選擇一個值,否則多次填充空值

SELECT DISTINCT YT.TITLE, YT.DETAILS, 
CASE WHEN XT.ACOLUMN = 'CATEGORY' THEN XT.BCOLUMN END AS CATEGORY, 
CASE WHEN XT.ACOLUMN = 'DIVISION' THEN XT.BCOLUMN END AS DIVISION 
FROM DB.YTABLE YT 
LEFT OUTER JOIN DB.XTABLE XT 
ON YT.ID_NUM = XT.ID_NUM 

數據我想:

TitleExample1,DetailsExample1,組別,Division1

TitleExample2,DetailsExample2,空,Division2

數據我得到:

TitleExample1,DetailsExample1,組別,空

TitleExample1,DetailsExample1,空,Division1

TitleExample1,DetailsExample1,NULL,NULL

TitleExample2,DetailsExample2,空,Division2

TitleExample2 ,DetailsExample2,null,null

我也試圖做一個連接使用多個表身份爲同一個表:

SELECT DISTINCT YT.TITLE, YT.DETAILS, XT1.BCOLUMN AS CATEGORY1, 
     XT2.BCOLUMN AS DIVISION 
LEFT OUTER JOIN DB.XTABLE XT1 
ON YT.ID_NUM = XT.ID_NUM 
LEFT OUTER JOIN DB.XTABLE XT2 
ON YT.ID_NUM = XT.ID_NUM 
WHERE XT1.ACOLUMN = 'CATEGORY' AND 
XT2.ACOLUMN = 'DIVISION' 

這種運作良好,如果填充兩個類別和分裂值。但是,如果標題和詳細信息記錄沒有關聯的類別或部門,則查詢將不會選擇該記錄。

數據我想:

TitleExample1,DetailsExample1,組別,Division1

TitleExample2,DetailsExample2,空,Division2

數據我得到:

TitleExample1,DetailsExample1,組別,Division1

+0

如果您發佈將是有益的如果你的表格中包含3行,那是因爲你至少有3行符合你的XTABLE。此外,由於XT.ACOLUMN不能同時等於CATEGORY和DIVISION – Nagasaki 2013-05-03 14:32:29

回答

0
SELECT YT.TITLE, YT.DETAILS, 
Min(CASE WHEN XT.ACOLUMN = 'CATEGORY' THEN XT.BCOLUMN END) AS CATEGORY, 
Min(CASE WHEN XT.ACOLUMN = 'DIVISION' THEN XT.BCOLUMN END) AS DIVISION 
FROM DB.YTABLE YT 
LEFT OUTER JOIN DB.XTABLE XT 
ON YT.ID_NUM = XT.ID_NUM 
Group By YT.TITLE, YT.DETAILS 
0

你的第二個方法是更好的,但你必須在外部的ON語句添加您的病情JOIN

SELECT DISTINCT YT.TITLE, YT.DETAILS, XT1.BCOLUMN AS CATEGORY1, XT2.BCOLUMN AS DIVISION 
FROM DB.YTABLE YT 
LEFT OUTER JOIN DB.XTABLE XT1 ON (YT.ID_NUM = XT1.ID_NUM AND XT1.ACOLUMN = 'CATEGORY') 
LEFT OUTER JOIN DB.XTABLE XT2 ON (YT.ID_NUM = XT2.ID_NUM AND XT2.ACOLUMN = 'DIVISION') 
+0

,所以無法得到以下結果:TitleExample1,DetailsExample1,Category1,Division1,第一個查詢非常感謝!我只是嘗試添加額外的條件到外部連接和工作。 G馬斯特羅斯 - 我沒有時間嘗試你的解決方案,但會在星期一。感謝你們兩位! – ARC 2013-05-03 21:13:26