制作T-SQL查询

时间:2013-03-05 13:54:30

标签: tsql

我有一个关于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 

虽然我知道有可能通过更好的方式重新组织此表中存储的数据,但我无法控制这一点。我很高兴阅读有关数据重组的任何评论,但我无法将任何答案标记为无法解决当前存在的问题。

2 个答案:

答案 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)