将 2 个表合并为 1 个查询
Combine 2 tables into 1 query
我在使用 WITH 语句和 JOIN 将 2 个查询合并为 1 个查询时遇到问题。
我试过了,但没有一个能按照我想要的方式输出。
期望的输出
?
独立输出
加入结果
WITH your_first_query AS (
SELECT ...
)
, your_second_query AS (
SELECT ...
)
SELECT your_first_query.OFFICE
, your_first_query.MONTH
, your_first_query.NOMINAL_A
, your_second_query.NOMINAL_B
FROM your_first_query
INNER
JOIN your_second_query
ON your_second_query.OFFICE = your_first_query.OFFICE
AND your_second_query.MONTH = your_first_query.MONTH
ORDER
BY your_first_query.OFFICE
, your_first_query.MONTH
;
希望以下方法能解决您的问题:
WITH NOMINAL_A_CTE (OFFICE, MONTH, NOMINAL_A)
AS
(
SELECT OFFICE, MONTH, NOMINAL_A
FROM NOMINAL_A_QUERY
),
NOMINAL_B_CTE (OFFICE, MONTH, NOMINAL_B)
AS
(
SELECT OFFICE, MONTH, NOMINAL_B
FROM NOMINAL_B_QUERY
)
SELECT A.OFFICE, A.MONTH, SUM(A.NOMINAL_A), SUM(B.NOMINAL_B)
FROM NOMINAL_A_CTE AS A INNER JOIN NOMINAL_B_CTE AS B
ON A.OFFICE = B.OFFICE AND A.MOTNTH = B.MONTH
GROUP BY A.OFFICE, A.MONTH
ORDER BY A.OFFICE, A.MONTH;
因此,只需查看您的 2 个结果集和您想要左外连接查询结果 1 和查询结果 2 的唯一键 Office 和月份所需的输出。这里的 With 子句没有完成任何特殊的事情:
Select A.Office, A.Month, A.Nominal_A, B.Nominal_B
From (insert query1 here) A Left Outer Join
(Insert query2 here) B on A.Office=B.Office and A.Month=B.Month
我注意到在 SLO office 之后您想要的结果集丢失了所有内容,我想您已经厌倦了打字并且想展示它们。如果没有,你可以加个滤镜把它们去掉。
您的原始加入版本缺少两件事,
- 您需要在两个查询之间使用 Left Outer Join,这样查询 2 中丢失的办公室不会导致查询 1 中的数据消失。
- 您需要将连接键完全指定为 Office=Office AND Month=Month。通过仅指定月份,您告诉 SQL 为您提供查询 1 和查询 2 中办公室的所有组合。
感谢您的所有回复,先生!
我已经得到答案
WITH your_first_query AS (
SELECT ...
)
, your_second_query AS (
SELECT ...
)
SELECT your_first_query.OFFICE
, your_first_query.MONTH
, your_first_query.NOMINAL_A
, your_second_query.NOMINAL_B
FROM your_first_query
FULL
OUTER
JOIN your_second_query
ON your_second_query.OFFICE = your_first_query.OFFICE
AND your_second_query.MONTH = your_first_query.MONTH
ORDER
BY your_first_query.OFFICE
, your_first_query.MONTH
;
我在使用 WITH 语句和 JOIN 将 2 个查询合并为 1 个查询时遇到问题。 我试过了,但没有一个能按照我想要的方式输出。
期望的输出
独立输出
加入结果
WITH your_first_query AS (
SELECT ...
)
, your_second_query AS (
SELECT ...
)
SELECT your_first_query.OFFICE
, your_first_query.MONTH
, your_first_query.NOMINAL_A
, your_second_query.NOMINAL_B
FROM your_first_query
INNER
JOIN your_second_query
ON your_second_query.OFFICE = your_first_query.OFFICE
AND your_second_query.MONTH = your_first_query.MONTH
ORDER
BY your_first_query.OFFICE
, your_first_query.MONTH
;
希望以下方法能解决您的问题:
WITH NOMINAL_A_CTE (OFFICE, MONTH, NOMINAL_A)
AS
(
SELECT OFFICE, MONTH, NOMINAL_A
FROM NOMINAL_A_QUERY
),
NOMINAL_B_CTE (OFFICE, MONTH, NOMINAL_B)
AS
(
SELECT OFFICE, MONTH, NOMINAL_B
FROM NOMINAL_B_QUERY
)
SELECT A.OFFICE, A.MONTH, SUM(A.NOMINAL_A), SUM(B.NOMINAL_B)
FROM NOMINAL_A_CTE AS A INNER JOIN NOMINAL_B_CTE AS B
ON A.OFFICE = B.OFFICE AND A.MOTNTH = B.MONTH
GROUP BY A.OFFICE, A.MONTH
ORDER BY A.OFFICE, A.MONTH;
因此,只需查看您的 2 个结果集和您想要左外连接查询结果 1 和查询结果 2 的唯一键 Office 和月份所需的输出。这里的 With 子句没有完成任何特殊的事情:
Select A.Office, A.Month, A.Nominal_A, B.Nominal_B
From (insert query1 here) A Left Outer Join
(Insert query2 here) B on A.Office=B.Office and A.Month=B.Month
我注意到在 SLO office 之后您想要的结果集丢失了所有内容,我想您已经厌倦了打字并且想展示它们。如果没有,你可以加个滤镜把它们去掉。
您的原始加入版本缺少两件事,
- 您需要在两个查询之间使用 Left Outer Join,这样查询 2 中丢失的办公室不会导致查询 1 中的数据消失。
- 您需要将连接键完全指定为 Office=Office AND Month=Month。通过仅指定月份,您告诉 SQL 为您提供查询 1 和查询 2 中办公室的所有组合。
感谢您的所有回复,先生! 我已经得到答案
WITH your_first_query AS (
SELECT ...
)
, your_second_query AS (
SELECT ...
)
SELECT your_first_query.OFFICE
, your_first_query.MONTH
, your_first_query.NOMINAL_A
, your_second_query.NOMINAL_B
FROM your_first_query
FULL
OUTER
JOIN your_second_query
ON your_second_query.OFFICE = your_first_query.OFFICE
AND your_second_query.MONTH = your_first_query.MONTH
ORDER
BY your_first_query.OFFICE
, your_first_query.MONTH
;