2013-03-05 84 views
1

我对T-SQL查询有一个公认的新手问题(这很合理,因为我的确是T-SQL的新手)。构建一个T-SQL查询

考虑下表 -

Key | fieldName | Value 
============================== 
465 | Bing |  10 
465 | Ping |  50 
846 | Bing |  20 
846 | Zing |  80 
678 | Bing |  10 
678 | Ping |  50 
678 | Zing |  20 

我将如何编写一个查询返回以下?

  • 如果存在与字段名Bing10价值行,返回所有与该键行,否则不返回有关该密钥的任何行。

在上面的例子中,结果集应如下 -

Key | fieldName | Value 
============================== 
465 | Bing |  10 
465 | Ping |  50 
678 | Bing |  10 
678 | Ping |  50 
678 | Zing |  20 

虽然我知道,有可能的方式更好的方法来重新组织此表中存储的数据,我没有控制这一点。我很乐意阅读关于数据重组的任何意见,但我不能标记任何不能解决问题的答案,因为它目前存在。

回答

3

您可以加入在桌子上再次找到了Bing/10值:

SELECT DISTINCT T1.[Key], T1.fieldName, T1.Value 
FROM YourTable T1 
INNER JOIN YourTable T2 ON T1.[Key] = T2.[Key] 
WHERE T2.fieldName = 'Bing' and T2.Value = 10 

而且因为他们目前正风靡一时,这里有一个SQL Fiddle demonstration

+0

谢谢你,帮我在我的解决办法。我开始担心我已经从我需要的实际查询中抽象出来了,但我最终还是到了那里。喜欢SQL Fiddle演示。 – 2013-03-05 15:18:29

1

另一个选项是:

SELECT DISTINCT T1.[Key], T1.fieldName, T1.Value 
FROM YourTable T1 
WHERE EXISTS (SELECT 1 
       FROM YourTable T2 
       WHERE T2.[Key] = T1.[Key] 
        AND T2.fieldName = 'Bing' 
        AND T2.Value = 10)