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'
)