2016-10-06 2 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 | 
          +----+--------+------+ 

Я присоединяюсь к этим двум таблицам на основе идентификатора.

Я не хочу, чтобы результат имел дублированные значения из таблицы заголовков. Я ожидаю, что результат, как следующее:

 
*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 .. включая. –

Смежные вопросы