假设我有一个包含以下列的表:
ID
Name
City
State
ZIP
我需要编写一个只返回一行的查询。此行将包含City
,State
和ZIP
,但如果结果集中的所有值都相同,我只希望字段具有值,否则我希望字段为是null
。
例如,如果每条记录都具有相同的状态,则State将返回结果。如果只有一个结果具有不同的状态,我希望该字段为null
。在SQL Server 2005中是否可以这样?
基本上,我想要一个这样的查询:
SELECT City, State, ZIP
FROM Users
WHERE ID IN(1,2,3,4,5,6)
但是只返回一行,使用上面描述的规格。
答案 0 :(得分:6)
SELECT
CASE WHEN COUNT(DISTINCT city) = 1 THEN MAX(city) ELSE NULL END AS city,
CASE WHEN COUNT(DISTINCT state) = 1 THEN MAX(state) ELSE NULL END AS state,
CASE WHEN COUNT(DISTINCT zip) = 1 THEN MAX(zip) ELSE NULL END AS zip
FROM Users
WHERE ID IN(1,2,3,4,5,6)
其他回答后:
SELECT
CASE WHEN COUNT(DISTINCT NULLIF(city,'**NULL**')) = 1 THEN MAX(city) ELSE NULL END AS city,
CASE WHEN COUNT(DISTINCT NULLIF(state,'**NULL**')) = 1 THEN MAX(state) ELSE NULL END AS state,
CASE WHEN COUNT(DISTINCT NULLIF(zip,'**NULL**')) = 1 THEN MAX(zip) ELSE NULL END AS zip
FROM Users
WHERE ID IN(1,2,3,4,5,6)
答案 1 :(得分:2)
如果列不可为空,或者如果要忽略空值,那么gbn的答案是正确的。但是,如果需要将空值视为不同的值,请尝试以下操作:
CASE WHEN COUNT(DISTINCT city) = 1
AND COUNT(city) = COUNT(*)
THEN MAX(city) ELSE NULL END AS city