2016-10-06 7 views
-1

2つのテーブル - ヘッダとマトリックス/詳細があります。結合で繰り返し値を避ける

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

私はこれらの2つのテーブルを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のものが含まれています。 –

関連する問題