如何仅从结果集中选择常用属性?

Dan*_*ert 2 sql t-sql sql-server sql-server-2005

可以说我有一个包含列的表,例如:

  • ID
  • Name
  • City
  • State
  • ZIP

我需要编写一个只返回一行的查询.这行将包括City,, StateZIP,但是如果结果集中的所有值都相同,我只希望字段具有值,否则我希望该字段为null.

例如,如果每个记录具有相同的State,则State将返回结果.如果只有一个结果具有不同的状态,我希望该字段为null.在SQL Server 2005中是否可以这样?

基本上,我想要一个这样的查询:

SELECT City, State, ZIP
FROM Users
WHERE ID IN(1,2,3,4,5,6)
Run Code Online (Sandbox Code Playgroud)

但只返回一行,我在上面描述的规格.

gbn*_*gbn 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)
Run Code Online (Sandbox Code Playgroud)

其他答案后:

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)
Run Code Online (Sandbox Code Playgroud)