Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 根据列属性值获取结果_Sql_Sql Server_Sql Server 2008_Ms Access - Fatal编程技术网

Sql 根据列属性值获取结果

Sql 根据列属性值获取结果,sql,sql-server,sql-server-2008,ms-access,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

我有一张如下表:

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。我无法做到这一点

预期结果:

  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
您可以尝试以下方法:

编辑:

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


这就是你要找的:

SELECT *
FROM TABLE
WHERE PLAN IN (
        SELECT DISTINCT PLAN
        FROM TABLE
        WHERE Attributes = 'IsActive'
            AND Value = 'True');
内部查询将识别那些属性为
IsActive
且值等于
True
的计划,外部查询将为那些在子查询中已识别的对应计划选择所有行。

是否正在查找此项


首先,这个表没有规范化

应该是这样的:

Id Plan Name Class IsActive
 1   A  AAA   P    True
 2   B  BBB   Q    False
 3   C  CCC   R    True
未规范化表的查询为:

Select * 
From MyTable 
Where [Plan] In (
   Select [Plan] 
   From MyTable 
   Where Attributes = 'IsActive' And Value = 'True'
)

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

到目前为止您尝试了什么?它将只返回属性为IsActive的行,而不返回Name和Class属性。我需要活动计划的所有属性。@vivek:-更新了我的答案。请查收。最初被误解了。@vivek:-还有一个附带说明:您的问题在MS Access和SQL Server中都有标记。但是,查询将在数据库和数据库上都起作用,但您应该避免标记您未使用的产品:)为什么
Attributes='IsActive'
以及('Name','Class','IsActive')
中的属性?如果OP的属性比列出的属性多怎么办?不是所有的表都必须规范化。是的,但是所有的表都应该规范化:-)只有当表中的不同属性不超过3个时,将表架构更改为您建议的模式才有效。但是如果这个表中有1000个不同的属性呢?我们不知道OP提供的数据是实际数据还是样本数据(这仅与本例相关,很可能无法代表真实场景和表中包含的真实数据)。Ypu是对的。我只是想提出一个写表格的好方法。然后我建议你把它听起来像一个建议:-)就像这个社区的其他东西一样,一个建议。
Id Plan Name Class IsActive
 1   A  AAA   P    True
 2   B  BBB   Q    False
 3   C  CCC   R    True
Select * 
From MyTable 
Where [Plan] In (
   Select [Plan] 
   From MyTable 
   Where Attributes = 'IsActive' And Value = 'True'
)