我正在尝试将一些 Oracle 查询转换为 Postgres 并遇到listagg.
甲骨文代码
select max(eta) eta, mso_id, listagg(carrier_name, ',')
within group (order by eta) as carrier
from tb_flight_schedule group by mso_id;
Run Code Online (Sandbox Code Playgroud)
我发现 Postgres 的等价物listaggisstring_agg并继续listagg与string_agg. 但是,我遇到了错误(错误:函数 string_agg(字符变化,未知,日期)不存在)。我在查询中遗漏了什么吗?Postgres 查询如下:
select max(eta) eta, mso_id, string_agg(carrier_name, ',')
WITHIN GROUP (ORDER BY eta) as carrier
from tb_flight_schedule group by mso_id;
Run Code Online (Sandbox Code Playgroud) 我想将以下 MYSQL 查询转换为 MS SQL Server。但是,我确定GROUP_CONCAT2017 年之前的 MS SQL Server 中不存在该函数。SQL SERVER 2017 中有一个函数。有人可以帮助我吗?
SELECT region, GROUP_CONCAT(route_name) AS route_name
FROM route_details
LEFT JOIN ride_details ON route_id = r_id
WHERE region != '' AND service_date = '2019-09-02'
GROUP BY region
Run Code Online (Sandbox Code Playgroud) 我正在尝试将“测试”列放在同一行中。Stuff()但是,我正在使用,似乎“测试”列正在遍历所有 qID 我缺少什么?
SELECT DISTINCT qID,
STUFF((
select ',' + B.text
from tbl B
where B.qID=qID
order by B.text
for xml path('')
),1,1,'') as test
FROM tbl
WHERE qID in (2258060,2296222)
GROUP BY qID
Run Code Online (Sandbox Code Playgroud)
我在数据库中有一个表,如下所示:
Id Name
1 Item1
1 Item2
2 Item3
1 Item4
3 Item5
Run Code Online (Sandbox Code Playgroud)
我需要如下输出(第三列是计数):
1 Item1,Item2,Item4 3
2 Item3 1
3 Item5 1
Run Code Online (Sandbox Code Playgroud)
它是如何通过 SQL Query 实现的?