任何人都可以将此语句从 SQL Server 2019 转换为 2016 吗?我想用“-”连接路线字段,然后按 ID 分组并按 LNO 排序,但我需要删除重复的城市,例如MIA-ATL-ATL-MIA 需要删除一个ATL,它应该是MIA-ATL-MIA。
我的询问:
SELECT
ID,STRING_AGG(ROUTE, '-') WITHIN GROUP (ORDER BY LNO) AS ROUTING
FROM
(
SELECT '1' ID, 'JFK-LAX' ROUTE, '1' LNO UNION ALL
SELECT '1' ID, 'LAX_IAD' ROUTE, '2' LNO UNION ALL
SELECT '1' ID, 'IAD-ORD' ROUTE, '3' LNO UNION ALL
SELECT '5' ID, 'MIA-ATL' ROUTE, '1' LNO UNION ALL
SELECT '5' ID, 'ATL-MIA' ROUTE, '2' LNO UNION ALL
SELECT '2' ID, 'SEA-IAH' ROUTE, '1' LNO UNION ALL
SELECT '2' ID, 'IAH-AUS' ROUTE, '2' LNO UNION ALL
SELECT '2' ID, 'AUS-SEA' ROUTE, '3' LNO
) DST
GROUP BY ID
期望的结果:
ID ROUTING
1 JFK-LAX_IAD-ORD
2 SEA-IAH-AUS-SEA
5 MIA-ATL-MIA
我还没有完全完成。但它给了你一个想法。 我的方法 - SQL 2022 和 2016
--SQL 2022
SELECt
x.ID, X.ROUTING
, FixedRoute = (SELECT STRING_AGG(x.value, '-') FROM (select DISTINCT value from string_split(x.ROUTING, '-', 0)) x)
FROM
(
SELECT
ID, STRING_AGG(ROUTE, '-') WITHIN GROUP (ORDER BY LNO) AS ROUTING
FROM
(
SELECT '1' ID, 'JFK-LAX' ROUTE, '1' LNO UNION ALL
SELECT '1' ID, 'LAX-IAD' ROUTE, '2' LNO UNION ALL
SELECT '1' ID, 'IAD-ORD' ROUTE, '3' LNO UNION ALL
SELECT '5' ID, 'MIA-ATL' ROUTE, '1' LNO UNION ALL
SELECT '5' ID, 'ATL-MIA' ROUTE, '2' LNO UNION ALL
SELECT '2' ID, 'SEA-IAH' ROUTE, '1' LNO UNION ALL
SELECT '2' ID, 'IAH-AUS' ROUTE, '2' LNO UNION ALL
SELECT '2' ID, 'AUS-SEA' ROUTE, '3' LNO
) DST
GROUP BY ID
) as x
GO
--SQL 2016
Declare @t Table (ID int, ROUTE varchar(30), LNO int);
Insert Into @t
Values
(1, 'JFK-LAX', 1),
(1, 'LAX-IAD', 2),
(1, 'IAD-ORD', 3),
(5, 'MIA-ATL', 1),
(5, 'ATL-MIA', 2),
(2, 'SEA-IAH', 1),
(2, 'IAH-AUS', 2),
(2, 'AUS-SEA', 3)
SELECT
x.ID
,x.Route
--,dbo.FixRoute(x.Route) make function to remove duplicates
FROM
(
Select Distinct
ID,
Route = stuff((Select concat('-', t2.ROUTE)
From @t t2
Where t2.ID = t.ID
order by t2.LNO
For xml path (''), Type).value('.', 'varchar(100)'), 1, 1, '')
From @t t
) x
sql 2022
身份证 | 路由 | 固定路线 |
---|---|---|
1 | JFK-LAX-LAX-IAD-IAD-ORD | IAD-JFK-LAX-ORD |
2 | SEA-IAH-IAH-AUS-AUS-SEA | 澳大利亚-IAH-海 |
5 | MIA-ATL-ATL-MIA | ATL-MIA |
sql 2016
身份证 | 路线 |
---|---|
1 | JFK-LAX-LAX-IAD-IAD-ORD |
2 | SEA-IAH-IAH-AUS-AUS-SEA |
5 | MIA-ATL-ATL-MIA |