我需要选择具有1种状态的个人联系人。
问题是单个联系人可以基于4个不同的列来同时拥有多个状态。
活动状态取代非活动状态。如果联系人同时处于活动和非活动状态,则默认为活动状态。
到目前为止,我的子查询可以独立工作,但当单个联系人在不同列中有两个或更多同时状态时,它们会返回超过1个值。
关于如何以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
答案 0 :(得分:6)
您是否考虑过使用CASE?
SELECT
Contact,
MyStatus = CASE
WHEN Column1 = 1 OR Column2 = 1 THEN 'Active'
WHEN Column3 = 1 OR Column4 = 1 THEN 'Inactive'
END
FROM
MyTable
答案 1 :(得分:4)
不太确定您的问题,但是您是否正在寻找依赖于四列的单个状态行;
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
答案 2 :(得分:2)
我认为您需要一个案例陈述而不是子查询。
select Contact,
case when Column1 = 1 or Column2 = 1 then 'Active'
when Column3 = 1 or Column4 = 1 then 'Inactive'
end as MyStatus
from MyTable
答案 3 :(得分:1)
我没有运行它,但这至少解析并且应该指向正确的方向:
select contact,
case when column1 = 1 or column2 = 1 then 'Active'
when column3 = 1 or column4 = 1 then 'Inactive'
end
as 'MyStatus'
from mytable
答案 4 :(得分:0)
你可以使用CASE - 这应该有效,因为它会按顺序评估条件..
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
答案 5 :(得分:0)
我想你差不多了。您基本上缺少的是EXCEPT
关系运算符,例如
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;
答案 6 :(得分:-1)
我不完全理解你的问题,我不认为子查询是这样的,但你可以试试这个:
SELECT Contact,
(SELECT TOP 1 ActiveStatus FROM SomeTable WHERE This = 1 AND That = 2 ORDER BY ActiveStatus ASC)
FROM SomeTable
...