将 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 之后您想要的结果集丢失了所有内容,我想您已经厌倦了打字并且想展示它们。如果没有,你可以加个滤镜把它们去掉。

您的原始加入版本缺少两件事,

  1. 您需要在两个查询之间使用 Left Outer Join,这样查询 2 中丢失的办公室不会导致查询 1 中的数据消失。
  2. 您需要将连接键完全指定为 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
;