【发布时间】:2018-12-03 12:04:09
【问题描述】:
我有一张包含不同航线的表格,我想对它们进行分组,而不考虑哪个是始发城市,哪个是目的地。
例如路线阿姆斯特丹-伦敦和伦敦-阿姆斯特丹的值应由阿姆斯特丹-伦敦路线组合在一起。
有人遇到过类似的问题吗?
【问题讨论】:
标签: sql sql-server tsql group-by
我有一张包含不同航线的表格,我想对它们进行分组,而不考虑哪个是始发城市,哪个是目的地。
例如路线阿姆斯特丹-伦敦和伦敦-阿姆斯特丹的值应由阿姆斯特丹-伦敦路线组合在一起。
有人遇到过类似的问题吗?
【问题讨论】:
标签: sql sql-server tsql group-by
我想你正在寻找
CREATE TABLE Routes(
ID INT,
OriginalLocation VARCHAR(45),
Destination VARCHAR(45)
);
INSERT INTO Routes VALUES
(1, 'Amsterdam', 'London'),
(2, 'London', 'Amsterdam'),
(3, 'London', 'Algeria'),
(4, 'Algeria', 'France');
WITH C AS
(
SELECT *,
CASE WHEN EXISTS(
SELECT 1
FROM Routes
WHERE OriginalLocation = R.Destination --You can use UPPER()/LOWER() here
AND
Destination = R.OriginalLocation --and here too
AND
ID != R.ID
)
THEN ID
ELSE 0
END G
FROM Routes R
)
SELECT ID,
OriginalLocation,
Destination
FROM C
WHERE NOT (G > 1);
返回:
+----+------------------+-------------+
| ID | OriginalLocation | Destination |
+----+------------------+-------------+
| 1 | Amsterdam | London |
| 3 | London | Algeria |
| 4 | Algeria | France |
+----+------------------+-------------+
【讨论】:
如果你有这样的桌子
[flight routes]
originlocation| destinationlocation
Amsterdam | London
London | Amsterdam
您可以尝试如下的一组 sql 查询
; with orderedroutes as
(
select distinct
originlocation= Case when originlocation < destinationlocation then originlocation else destinationlocation end ,
destinationlocation = Case when originlocation < destinationlocation then destinationlocation else originlocation end
from [flight routes]
)
select * from orderedroutes
【讨论】: