1

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

我将如何编写查询以返回以下内容?

  • 如果存在fieldName BingValue10的行,则返回具有该键的所有行,否则不返回与该键有关的任何行。

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

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

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

4

2 回答 2

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 演示

于 2013-03-05T13:56:57.790 回答
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)
于 2013-03-05T14:15:17.937 回答