有一个 table 具有国家和城市列,如下面的 table 输入所示。我需要如下所述的输出

There is a table having country and city columns as shown in the below table input. I need the output as mentioned below

我需要一个 SQL 查询来从输入 table

中获得所需的输出

看来你真的愿意交错记录,每个国家后面都有它的相关国家。

实际解决方案在很大程度上取决于您的数据集,所以我假设您的数据集支持 window 函数、行构造函数 values() 和横向连接(SQL Server 和 Postgres 是两个候选者).

在SQL服务器中,你可以这样做:

select distinct rn, idx, val
from (
    select t.*, dense_rank() over(order by country) rn
    from mytable t
) t
cross apply (values (t.country, 1), (t.city, 2)) as v(val, idx)
order by rn, idx, val

Demo on DB Fiddle:

rn | idx | val   
-: | --: | :-----
 1 |   1 | INDIA 
 1 |   2 | BNG   
 1 |   2 | CHN   
 1 |   2 | HYD   
 2 |   1 | SWEDEN
 2 |   2 | STOCK 
 2 |   2 | VAXO  

在 Postgres 中,您只需将 outer apply 替换为 cross join lateralDemo.

您可以使用 UNION 查询来执行此操作,首先选择不同的国家/地区名称,然后选择该国家/地区的每个城市。然后输出由国家订购;该值是国家还是城市;然后按值:

SELECT DISTINCT country AS data, country, 1 AS ctry
FROM cities
UNION ALL
SELECT city, country, 0
FROM cities
ORDER BY country, ctry DESC, data

输出:

data    country     ctry
India   India       1
BNG     India       0
CHN     India       0
HYD     India       0
Sweden  Sweden      1
GOTH    Sweden      0
STOCK   Sweden      0
VAXO    Sweden      0

Demo on dbfiddle