2013-04-28 103 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

相关问题