在 SQL 服务器中转置国家和城市
Transpose Country and City in SQL Server
我有一个 table,其中包含 2 个字段国家和城市。我想将其转换为我将国家/地区字段作为我的 headers 并将每个城市作为它们下面的字段。
当我使用下面提供的代码时,我得到了结果,但是有空值
SELECT
CASE WHEN Country = 'USA' then City end as USA,
CASE WHEN Country = 'India' then City end as India,
CASE WHEN Country = 'UK' then City end as UK
FROM Country
我的问题是如何获得没有空值的结果?
您可以将这些汇总为 max(CASE WHEN ... END) AS ....
或者您可以使用数据透视表:
SELECT
p.*
FROM
Country
PIVOT (MAX(City) FOR Country IN (USA, India, UK)) P
为了获得您正在寻找的结果,您需要为每个城市引入国家/地区特定标识符(例如:美国:{1:纽约,2:洛杉矶}),如下所示:
select *
from
(
select
*,
ROW_NUMBER() over (partition by country order by City, Country) id
from Country
) c
pivot
(
max(city) for country in(usa, uk, india)
) p
您可以使用条件聚合来做到这一点:
SELECT MAX(CASE WHEN Country = 'USA' then City end) as USA,
MAX(CASE WHEN Country = 'India' then City end) as India,
MAX(CASE WHEN Country = 'UK' then City end) as UK
FROM Country
GROUP BY City;
我有一个 table,其中包含 2 个字段国家和城市。我想将其转换为我将国家/地区字段作为我的 headers 并将每个城市作为它们下面的字段。
当我使用下面提供的代码时,我得到了结果,但是有空值
SELECT
CASE WHEN Country = 'USA' then City end as USA,
CASE WHEN Country = 'India' then City end as India,
CASE WHEN Country = 'UK' then City end as UK
FROM Country
我的问题是如何获得没有空值的结果?
您可以将这些汇总为 max(CASE WHEN ... END) AS ....
或者您可以使用数据透视表:
SELECT
p.*
FROM
Country
PIVOT (MAX(City) FOR Country IN (USA, India, UK)) P
为了获得您正在寻找的结果,您需要为每个城市引入国家/地区特定标识符(例如:美国:{1:纽约,2:洛杉矶}),如下所示:
select *
from
(
select
*,
ROW_NUMBER() over (partition by country order by City, Country) id
from Country
) c
pivot
(
max(city) for country in(usa, uk, india)
) p
您可以使用条件聚合来做到这一点:
SELECT MAX(CASE WHEN Country = 'USA' then City end) as USA,
MAX(CASE WHEN Country = 'India' then City end) as India,
MAX(CASE WHEN Country = 'UK' then City end) as UK
FROM Country
GROUP BY City;