2016-10-06 90 views
-1

我有两个表格 - 标题和矩阵/细节。避免连接中的重复值

 
*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

您使用的是MySQL还是MS SQL Server?使用Oracle SQL Developer? – jarlh

+0

对许多标签您使用的是哪个数据库? – Melchizedek

+0

即时通讯使用SQL Server。对不起,我添加了所有的SQL数据库名称。 –

回答

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 
+0

加1,2,3的订单 – Esperento57

+0

@ Esperento57 yup .. included。 –