【发布时间】:2021-08-19 05:44:44
【问题描述】:
我有两个查询从两个表中返回数据:
SELECT TOP 3
AE.id, AE.name, COUNT(R.id) 'number of reserves'
FROM
AIRPORT AE
INNER JOIN
FLY V ON V.id_destiny = AE.id
INNER JOIN
RESERVE R ON R.id_fly = V.id
GROUP BY
AE.id, AE.name
ORDER BY
COUNT(R.id) DESC;
返回数据示例:
| id | name | number of reserves |
|---|---|---|
| 6 | name1 | 27 |
| 4 | name2 | 18 |
| 14 | name3 | 14 |
和
SELECT TOP 3
AE.id, AE.name, COUNT(R.id) 'number of reserves'
FROM
AEROPUERTO AE
LEFT JOIN
FLY V ON V.id_destiny = AE.id
LEFT JOIN
RESERVE R ON R.id_fly = V.id
GROUP BY
AE.id, AE.name
ORDER BY
COUNT(R.id) ASC;
第二个查询返回的数据示例:
| id | name | number of reserves |
|---|---|---|
| 7 | name4 | 0 |
| 11 | name5 | 0 |
| 12 | name6 | 0 |
我需要将它们组合成一个输出,首先是第一个查询(以相同的顺序),然后是第二个查询,顺序相同,如下所示:
| id | name | number of reserves |
|---|---|---|
| 6 | name1 | 27 |
| 4 | name2 | 18 |
| 14 | name3 | 14 |
| 7 | name4 | 0 |
| 11 | name5 | 0 |
| 12 | name6 | 0 |
有办法吗?
编辑:我已经尝试过union all 选项,但我不能在每个查询中使用group by,因此返回的表与我需要的不同
(SELECT TOP 3 AE.id, AE.name, COUNT(R.id) 'number of reserves'
FROM AIRPORT AE
INNER JOIN FLY V
ON V.id_destiny = AE.id
INNER JOIN RESERVE R
ON R.id_fly = V.id
GROUP BY AE.id, AE.name)
UNION ALL
(SELECT TOP 3 AE.id, AE.name, COUNT(R.id) 'number of reserves'
FROM AEROPUERTO AE
LEFT JOIN FLY V
ON V.id_destiny= AE.id
LEFT JOIN RESERVE R
ON R.id_fly = V.id
GROUP BY AE.id, AE.name)
ORDER BY COUNT(R.id) ASC;
【问题讨论】:
-
您需要:1) 将每个查询括在括号中,2) 使用
UNION ALL将它们合并为一个,3) 添加ORDER BY以指定合并结果集的顺序。 -
已经尝试过了,但没有成功,因为如果 group by 存在,它会发送错误。
-
union all使用人工列标识源,然后按该列排序并计算计数
标签: sql sql-server tsql