SELECT 当 DISTINCT 时为 CASE

SELECT CASE when DISTINCT

我需要在数据库中列出有活跃员工的所有城市。如果该城市存在于多个州,我想将州名附加到它上面。所以我正在尝试做类似的事情:

SELECT Locations.LocationID,
    CASE
        WHEN Locations.City IS NOT DISTINCT
            THEN Locations.City + '(' + ISNULL(Locations.State,'') + ')'
        ELSE Locations.City
    END as LocationDescription
FROM Locations
    INNER JOIN Employees on Locations.LocationID = Employees.LocationID
WHERE Employees.Active=1 
ORDER BY LocationDescription

显然这不是我使用 DISTINCT 的正确语法,只是不确定如何去做。

我会选择每次都添加状态,但是,如果您真的想这样做,您可以使用 GROUP BYIN 子句...

WHEN Locations.City IN (SELECT Locations.City FROM Location GROUP BY City HAVING COUNT(*) > 1)

您可以使用相关子查询来完成,但是总是附加状态不是更容易吗?它也会使输出更加一致...

可能有更聪明的方法来做到这一点,但这应该可行。

SELECT l.LocationID,
    CASE
        WHEN (SELECT COUNT(City) FROM Locations WHERE L.city = city) > 1
            THEN l.City + '(' + ISNULL(l.State,'') + ')'
          ELSE l.City
    END as LocationDescription
FROM Locations L
    INNER JOIN Employees on l.LocationID = Employees.LocationID
WHERE Employees.Active=1 
ORDER BY LocationDescription