2013-04-28 122 views
0

我有兩個表如下:如何獲得每個組的一個項目?

表1:字段(FieldID,FormID,標題,dateCreated會,...)

表2:值(VALUEID,FormID,FieldID,價值,DateModified。 ..)

在某些情況下,一個字段有多個值,但在我的查詢中,我只想每個字段有一個值(如果有)。

這裏是我的代碼並不如我所願的工作:

SELECT f.FormID, f.FieldID, f.FormID, f.Title, v.Value, v.UserName FROM 
(SELECT * FROM FormFields WHERE FormID = '2D6C42E1-0C95-4E40-B792-A17E00C001BF') AS f 
LEFT JOIN 
(select FormID, ItemID, FieldID, Value, UserName, DateModified from FormValues 
    where FormID = '2D6C42E1-0C95-4E40-B792-A17E00C001BF') as v 
ON f.FormID = v.FormID AND f.FieldID = v.FieldID 
ORDER BY f.SO 

結果:

FormID         FieldID         Title  Value UserName 
2D6C42E1-0C95-4E40-B792-A17E00C001BF E7A78AC7-10A4-4752-85D6-A17E00C22EF9 Field One Val One User1 
2D6C42E1-0C95-4E40-B792-A17E00C001BF E7A78AC7-10A4-4752-85D6-A17E00C22EF9 Field One Val Two User2 
2D6C42E1-0C95-4E40-B792-A17E00C001BF 8E1FAC2A-02F1-4D0D-A3E0-A184001484D8 Field Two NULL NULL 

注:第二排是不需要的。

我試過「group by」,但沒有爲我工作。請有人幫助我。

由於提前, Kardo

回答

1

嘗試

SELECT f.FormID, f.FieldID, f.FormID, f.Title, v.Value, v.UserName FROM 
(SELECT * FROM FormFields WHERE FormID = '2D6C42E1-0C95-4E40-B792-A17E00C001BF') AS f 
LEFT JOIN 
(select FormID, ItemID, FieldID, Value, UserName, DateModified, 
ROW_NUMBER() OVER (PARTITION BY FieldID ORDER BY Value) as rn from FormValues 
    where FormID = '2D6C42E1-0C95-4E40-B792-A17E00C001BF') as v 
ON f.FormID = v.FormID AND f.FieldID = v.FieldID AND v.rn=1 
ORDER BY f.SO 

您可能需要基於在OVER條款來調整ORDER BY Value你想要什麼行是該組中的第一(與「一」和「二」將返回「一」,但我不知道其他可能的值)。

+0

我真的很感謝你的善意幫助。做得好!它的工作原理,我希望:) – Kardo 2013-04-28 15:14:07

+0

您好再次,你會看看這篇文章太請:http://stackoverflow.com/questions/16264524/how-to-get-data-from-a-property-value-表結構 – Kardo 2013-04-28 16:20:47

相關問題