我有一个关于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
如何撰写查询以返回以下内容?
Bing
的 fieldName 10
和 Value 的行,请返回包含该键的所有行,否则请不返回与该密钥有关的任何行。在上面的例子中,结果集应该如下 -
Key | fieldName | Value
==============================
465 | Bing | 10
465 | Ping | 50
678 | Bing | 10
678 | Ping | 50
678 | Zing | 20
虽然我知道有可能通过更好的方式重新组织此表中存储的数据,但我无法控制这一点。我很高兴阅读有关数据重组的任何评论,但我无法将任何答案标记为无法解决当前存在的问题。
答案 0 :(得分: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。
答案 1 :(得分: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)