Sql 子查询返回了多个值
我需要选择状态为1的个人联系人 问题在于,一个联系人可以基于4个不同的列同时具有多个状态 活动状态取代非活动状态。如果联系人同时处于活动和非活动状态,则应默认为活动 到目前为止,我的子查询独立运行良好,但当单个联系人在不同列中有2个或多个同时状态时,它们会返回超过1个值 关于如何以1状态返回单个联系人有何想法Sql 子查询返回了多个值,sql,tsql,Sql,Tsql,我需要选择状态为1的个人联系人 问题在于,一个联系人可以基于4个不同的列同时具有多个状态 活动状态取代非活动状态。如果联系人同时处于活动和非活动状态,则应默认为活动 到目前为止,我的子查询独立运行良好,但当单个联系人在不同列中有2个或多个同时状态时,它们会返回超过1个值 关于如何以1状态返回单个联系人有何想法 SELECT Contact, ((SELECT 'Active' FROM MyTable WHERE Column1 = 1
SELECT Contact,
((SELECT 'Active'
FROM MyTable
WHERE Column1 = 1
OR Column2 = 1)
UNION
(SELECT 'Inactive'
FROM MyTable
WHERE Column3 = 1
OR Column4 = 1)) AS MyStatus
FROM MyTable
我不完全理解您的问题,我不认为子查询是解决此问题的方法,但您可以尝试以下方法:
SELECT Contact,
(SELECT TOP 1 ActiveStatus FROM SomeTable WHERE This = 1 AND That = 2 ORDER BY ActiveStatus ASC)
FROM SomeTable
...
你有没有考虑改用它
我还没有运行它,但这至少可以解析并为您指出正确的方向:
select contact,
case when column1 = 1 or column2 = 1 then 'Active'
when column3 = 1 or column4 = 1 then 'Inactive'
end
as 'MyStatus'
from mytable
不太确定您的问题,但您是否在寻找依赖于四列的单个状态行
SELECT Contact,
CASE
WHEN Column1 = 1 OR Column2 = 1 THEN 'Active'
WHEN Column3 = 1 OR Column4 = 1 THEN 'Inactive'
ELSE 'Unknown'
END status
FROM MyTable
我认为您需要一个案例陈述,而不是子查询
select Contact,
case when Column1 = 1 or Column2 = 1 then 'Active'
when Column3 = 1 or Column4 = 1 then 'Inactive'
end as MyStatus
from MyTable
您可以使用用例-这应该有效,因为它将按顺序评估条件
SELECT Contact, MyStatus =
CASE
WHEN Column1 = 1 THEN 'Active'
WHEN Column2 = 1 THEN 'Active'
WHEN Column3 = 1 THEN 'Inactive'
WHEN Column4 = 1 THEN 'Inactive'
ELSE 'Unknown'
END
FROM MyTable
我想你就快到了。您基本上缺少的是关系运算符,例如
SELECT Contact, 'Active' AS MyStatus
FROM MyTable
WHERE Column1 = 1
OR Column2 = 1
UNION
SELECT Contact, 'Inactive'
FROM MyTable
WHERE Column3 = 1
OR Column4 = 1
EXCEPT
SELECT Contact, 'Inactive'
FROM MyTable
WHERE Column1 = 1
OR Column2 = 1;
如果某个联系人仅处于活动状态,则该操作将起作用。但如果他不活跃,那么它就不会出现。问题是我需要检查两者。如果两者都存在,则显示active(活动)。这些是您需要检查的唯一状态吗?+1但如果可能存在其他条件,则查询可能不会返回行。至少,这与OP尝试的解决方案所表达的意图是一致的……类似于
…其中1 IN(Column1,Column2,Column3,Column4)代码>
SELECT Contact, 'Active' AS MyStatus
FROM MyTable
WHERE Column1 = 1
OR Column2 = 1
UNION
SELECT Contact, 'Inactive'
FROM MyTable
WHERE Column3 = 1
OR Column4 = 1
EXCEPT
SELECT Contact, 'Inactive'
FROM MyTable
WHERE Column1 = 1
OR Column2 = 1;