这里是我的代码:
drop table if exists #Table_A
drop table if exists #Table_B
drop table if exists #Table_C
create table #Table_A
(
[DATE] Date,
TYPE INT,
QTY INT
);
create table #Table_B
(
[DATE] Date,
TYPE INT,
QTY INT
);
create table #Table_C
(
[DATE] Date,
TYPE INT,
QTY INT
);
Insert into #Table_A VALUES ('2018-01-01', 1, 10)
Insert into #Table_B VALUES ('2018-01-01', 1, 5)
Insert into #Table_B VALUES ('2018-01-01', 2, 10)
Insert into #Table_B VALUES ('2018-01-01', 3, 10)
Insert into #Table_C VALUES ('2018-01-01', 1, 5)
Insert into #Table_C VALUES ('2018-01-01', 2, 10)
Insert into #Table_C VALUES ('2018-01-01', 3, 10)
查询:
select
A.[DATE],
SUM(CASE WHEN A.[TYPE] = 1 THEN A.QTY END) A_QTY,
SUM(CASE WHEN B.[TYPE] = 1 THEN B.QTY END) B_QTY,
SUM(CASE WHEN C.[TYPE] = 1 THEN C.QTY END) C_QTY,
SUM(CASE WHEN A.[TYPE] = 2 THEN A.QTY END) A_QTY,
SUM(CASE WHEN B.[TYPE] = 2 THEN B.QTY END) B_QTY,
SUM(CASE WHEN C.[TYPE] = 2 THEN C.QTY END) C_QTY,
SUM(CASE WHEN A.[TYPE] = 3 THEN A.QTY END) A_QTY,
SUM(CASE WHEN B.[TYPE] = 3 THEN B.QTY END) B_QTY,
SUM(CASE WHEN C.[TYPE] = 3 THEN C.QTY END) C_QTY
FROM
#Table_A A
INNER JOIN #Table_B B ON A.DATE = B.DATE AND A.TYPE = B.TYPE
INNER JOIN #Table_C C ON A.DATE = C.DATE AND A.TYPE = C.TYPE
GROUP BY A.[DATE]
目前的结果:
DATE | A_QTY | B_QTY | C_QTY A_QTY B_QTY C_QTY A_QTY B_QTY C_QTY
2018-01-01 | 10 | 5 | 5 NULL NULL NULL NULL NULL NULL
预期结果:
DATE | A_QTY | B_QTY | C_QTY A_QTY B_QTY C_QTY A_QTY B_QTY C_QTY
2018-01-01 | 10 | 5 | 5 NULL 10 10 NULL 10 10
请让我知道我怎样才能得到预期的结果。 (我目前知道它不工作,因为inner join
的)。
与您的查询的问题在于,由于它使用INNER JOIN
s,只记录/日期元组存在于所有3个表中进行计数。
如果有一个表,可以将始终拥有所有(TYPE
,DATE
)提供的元组(在你的样本数据,这将是Table_C
),那么你可以使用它的起点和使用LEFT JOIN
s:
FROM #Table_C C
LEFT JOIN #Table_A A ON A.DATE = C.DATE AND A.TYPE = C.TYPE
LEFT JOIN #Table_B B ON B.DATE = C.DATE AND B.TYPE = C.TYPE
否则,你可能想你INNER JOIN
s改变FULL OUTER JOIN
s:
FROM #Table_A A
FULL OUTER JOIN #Table_B B ON A.DATE = B.DATE AND A.TYPE = B.TYPE
FULL OUTER JOIN #Table_C C ON A.DATE = C.DATE AND A.TYPE = C.TYPE
该FULL OUTER JOIN
解决方案需要适应SELECT
和GROUP BY
条款,因为日期可能来自任何3个表。
查询:
SELECT
COALESCE(A.[DATE], B.[DATE], C.[DATE]) DATE,
SUM(CASE WHEN A.[TYPE] = 1 THEN A.QTY END) A_QTY,
SUM(CASE WHEN B.[TYPE] = 1 THEN B.QTY END) B_QTY,
SUM(CASE WHEN C.[TYPE] = 1 THEN C.QTY END) C_QTY,
SUM(CASE WHEN A.[TYPE] = 2 THEN A.QTY END) A_QTY,
SUM(CASE WHEN B.[TYPE] = 2 THEN B.QTY END) B_QTY,
SUM(CASE WHEN C.[TYPE] = 2 THEN C.QTY END) C_QTY,
SUM(CASE WHEN A.[TYPE] = 3 THEN A.QTY END) A_QTY,
SUM(CASE WHEN B.[TYPE] = 3 THEN B.QTY END) B_QTY,
SUM(CASE WHEN C.[TYPE] = 3 THEN C.QTY END) C_QTY
FROM
#Table_A A
FULL OUTER JOIN #Table_B B ON A.DATE = B.DATE AND A.TYPE = B.TYPE
FULL OUTER JOIN #Table_C C ON A.DATE = C.DATE AND A.TYPE = C.TYPE
GROUP BY COALESCE(A.[DATE], B.[DATE], C.[DATE])
DATE | A_QTY | B_QTY | C_QTY | A_QTY | B_QTY | C_QTY | A_QTY | B_QTY | C_QTY
:------------------ | ----: | ----: | ----: | ----: | ----: | ----: | ----: | ----: | ----:
01/01/2018 00:00:00 | 10 | 5 | 5 | | 10 | 10 | | 10 | 10