0

我有两个表如下:

表 1:字段(FieldID、FormID、Title、DateCreated、...)

表 2:值(ValueID、FormID、FieldID、Value、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

注意:第二行是不需要的。

我尝试了“分组”,但对我不起作用。请有人帮助我。

在此先感谢,卡多

4

1 回答 1

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

您可能需要根据要成为组中第一行的行来调整ORDER BY Value子句OVER(使用“One”和“Two”将返回“One”,但我不知道其他可能的值)。

于 2013-04-28T15:04:44.393 回答