代码之家  ›  专栏  ›  技术社区  ›  Dan Herbert

如何仅从结果集中选择公共属性?

  •  2
  • Dan Herbert  · 技术社区  · 16 年前

    • ID
    • Name
    • City
    • State
    • ZIP

    我需要编写一个只返回一行的查询。这一行将包括 城市 状态 拉链 null .

    就一个 其中的结果具有不同的状态,我希望字段为 . 在SQLServer2005中是否可以实现类似的功能?

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

    SELECT City, State, ZIP
    FROM Users
    WHERE ID IN(1,2,3,4,5,6)
    

    2 回复  |  直到 16 年前
        1
  •  6
  •   gbn    16 年前
    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)
    
        2
  •  2
  •   Dan Herbert    16 年前

    如果列不可为null,或者如果要忽略null,则gbn的答案是正确的。但是,如果需要将空值视为不同的值,请尝试以下操作:

    CASE WHEN COUNT(DISTINCT city) = 1 
          AND COUNT(city) = COUNT(*) 
         THEN MAX(city) ELSE NULL END AS city