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 BY
和 IN
子句...
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
我需要在数据库中列出有活跃员工的所有城市。如果该城市存在于多个州,我想将州名附加到它上面。所以我正在尝试做类似的事情:
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 BY
和 IN
子句...
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