我有两个表 - 标题和矩阵/细节。
*Header Table* *Matrix / Details Table* +----+--------+-----+ +----+--------+------+ | ID | Parent | Qty | | ID | Child | Qty | +----+--------+-----+ +----+--------+------+ | 1 | A | 10 | | 1 | X | 100 | | 2 | B | 20 | | 1 | Y | 1000 | | 3 | C | 30 | | 2 | X | 200 | +----+--------+-----+ | 2 | Y | 2000 | | 3 | X | 30 | | 3 | Y | 300 | | 3 | Z | 3000 | +----+--------+------+
我正在根据ID加入这两个表。
我不希望结果从头表中获得重复值。 我希望得到如下结果:
*Current Result* *Expected Result* +----+--------+-----+-------+------+ +----+--------+-----+-------+------+ | ID | Parent | Qty | Child | Qty | | ID | Parent | Qty | Child | Qty | +----+--------+-----+-------+------+ +----+--------+-----+-------+------+ | 1 | A | 10 | X | 100 | | 1 | A | 10 | X | 100 | | 1 | A | 10 | Y | 1000 | | | | | Y | 1000 | | 2 | B | 20 | X | 200 | | 2 | B | 20 | X | 200 | | 2 | B | 20 | Y | 2000 | | | | | Y | 2000 | | 3 | C | 30 | X | 30 | | 3 | C | 30 | X | 30 | | 3 | C | 30 | Y | 300 | | | | | Y | 300 | | 3 | C | 30 | Z | 3000 | | | | | Z | 3000 | +----+--------+-----+-------+------+ +----+--------+-----+-------+------+
这可能吗?如果没有,备用解决方案可用吗?
提前致谢...
答案 0 :(得分:1)
如果您使用的是SQL Server
,请尝试使用以下查询。
;WITH CTE_1
AS
(SELECT *,ROW_NUMBER()OVER(PARTITION BY ID,Parent,Quantity ORDER BY ID ) RNO
FROM Header H
JOIN [Matrix / Details] M
ON H.ID=M.ID)
SELECT CASE WHEN RNO=1 THEN CAST(ID as VARCHAR(50)) ELSE '' END ID,
CASE WHEN RNO=1 THEN Parent ELSE '' END Parent,
CASE WHEN RNO=1 THEN cast(Quantity as VARCHAR(50)) ELSE '' END Quantity,
Child,Qty
FROM CTE_1
ORDER BY ID,Parent,Quantity