sql—有一个包含国家和城市列的表,如下表输入所示我需要下面提到的输出

kiz8lqtg  于 2021-08-09  发布在  Java
关注(0)|答案(2)|浏览(368)



我需要一个sql查询来从输入表中获得所需的输出

z4bn682m

z4bn682m1#

你可以用一个 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

在dbfiddle上演示

icnyk63a

icnyk63a2#

看起来你真的很愿意把这些记录穿插在一起,每个国家后面都是相关的国家。
实际的解决方案在很大程度上取决于您的数据,所以让我假设您的数据支持窗口函数、行构造函数 values() 横向连接(sqlserver和postgres是两个候选)。
在sql server中,可以执行以下操作:

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

db小提琴演示:

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 applycross join lateral :演示。

相关问题