2011-09-12 90 views
1

我並不擅長SQL,它是星期一,我們昨晚舉辦了一個派對,我不能直視,我需要你們的幫助。從表中的「分層」數據中提取組合結果

如果我有一個SQL表中的數據。類似的東西:

ModelName Color Garageld 

BMW   Black NULL 
Mercedes  Red  NULL 
Audi   Yellow NULL 
BMW   Green 1 
Mercedes  Blue 1 

現在使用LINQtoEntities我需要得到一個車庫中的所有記錄ID爲== 1,它應該結合記錄 - 如果沒有爲車庫和一輛汽車定義的顏色 - 獲得它,如果沒有,採取一切顏色是NULL

所以結果爲garageId == 1設置應該是:

Audi   Yellow 
BMW   Green 
Mercedes  Blue 
+1

根據你的例子,奧迪爲什麼包括在列表中(GarageID爲空) – Sparky

+3

@Sparky,因爲他必須將它返還給誰在派對上給他鑰匙 –

+0

讓我們這樣說吧:有默認車型和所有車庫的顏色,以及專門定義的車庫顏色。我需要得到整個列表 - 所有的車庫#1的顏色和缺失的,但默認情況下定義 – Agzam

回答

1

我會通過使用外部做到這一點從默認的聯接( null)車庫入庫1條目。使用COALESCE(),它是一個標準的SQL函數,它返回它的第一個非空參數。

SELECT dflt.ModelName, COALESCE(g.Color, dflt.Color) AS Color 
FROM mytable AS dflt 
LEFT OUTER JOIN mytable AS g 
    ON dflt.ModelName = g.ModelName AND g.GarageId = 1 
WHERE dflt.GarageId IS NULL 

當發現對於給定的模型中沒有車庫1項,外聯接,使所有列空的g.*所以COALESCE()將跳過g.Color和使用dflt.Color代替。

+0

謝謝..但是LINQ呢? – Agzam

+0

對不起,我對使用LINQ一無所知。 –