根据列属性值获取结果

时间:2015-10-09 11:47:40

标签: sql sql-server sql-server-2008 ms-access

我有一张如下表:

Id   Plan  Attributes   Value
1     A      Name        AAA
2     A      Class       P
3     A      IsActive    True
4     B      Name        BBB
5     B      Class       Q
6     B      IsActive    False
7     C      Name        CCC
8     C      Class       R 
9     C      IsActive    True

我想只获得那些将其IsActive属性的值设置为True的Plan(及其所有属性)。我无法做到这一点。

期望的结果:

  Id   Plan  Attributes   Value
    1     A      Name        AAA
    2     A      Class       P
    3     A      IsActive    True
    7     C      Name        CCC
    8     C      Class       R 
    9     C      IsActive    True

5 个答案:

答案 0 :(得分:1)

你可以试试这个:

修改

select * from mytable 
where plan in (select plan from mytable 
    where Attributes = 'IsActive' and Value = 'True')

答案 1 :(得分:1)

尝试

select * 
from tbl
where plan in (
    select plan from tbl 
    where Attributes = 'IsActive' and Value = 'True'
)

答案 2 :(得分:1)

这就是你要找的东西:

SELECT *
FROM TABLE
WHERE PLAN IN (
        SELECT DISTINCT PLAN
        FROM TABLE
        WHERE Attributes = 'IsActive'
            AND Value = 'True');

内部查询将识别具有IsActive属性和值等于True的那些计划,外部查询将选择已在子查询中标识的那些对应计划的所有行。

答案 3 :(得分:0)

您是否正在寻找此DEMO HERE

select * from @table_ 
where [plan] not in (select [plan] from @table_ where value ='False')

答案 4 :(得分:0)

首先,此表未规范化。

应该是这样的:

CacheManager cm = CacheManager.newInstance();
    Cache cache = cm.getCache("cache1");
    Cache cacheTrade = cm.getCache("cache2");

您的非规范化表格的查询是:

Id Plan Name Class IsActive
 1   A  AAA   P    True
 2   B  BBB   Q    False
 3   C  CCC   R    True

注意:我在方括号中写了[Plan],因为Plan是一个保留字。