Как мне объединить эти две таблицы?

sql-server

37 просмотра

2 ответа

Это две таблицы, которые у меня есть.

 | StockId | Item1 | Quantity1|
     1        10        5
     1        11        6

 | StockId | Item2 | Quantity2 |
     1        12        4

Мне нужно объединить эти две таблицы, чтобы получить вывод:

 | StockId | Item1 | Quantity1 | Item2 | Quantity2 |
      1       10        5          12       4
      1       11        6          -        -

Каждая таблица может содержать 1 или более строк. Я пытался присоединиться к таблицам, но это не сработало.

SELECT * FROM Table1 
INNER JOIN Table2 ON Table1.StockId = Table2.StockId

Это даст мне вывод:

 | StockId | Item1 | Quantity1 | Item2 | Quantity2 |
      1       10        5          12       4
      1       11        6          12       4
Автор: Shanid Источник Размещён: 08.11.2019 10:56

Ответы (2)


2 плюса

@JamesZ Ваш запрос не будет выполнен в следующем сценарии. Вы генерируете RN на основе Item1 и Item2 и не учитывает StockId, а также объединяете две таблицы, которые не учитывает StockIds. В приведенном ниже примере я добавил больше строк, чтобы убедиться, что запрос дает правильный результат.

CREATE TABLE #T1 (StockId INT ,Item1 INT,Quantity1 INT)
CREATE TABLE #T2 (StockId INT ,Item2 INT,Quantity2 INT)

INSERT INTO #T1
SELECT 1,10,5 UNION ALL
SELECT 1,11,6 UNION ALL
SELECT 1,9 ,6 UNION ALL
SELECT 1,8 ,6 UNION ALL
SELECT 2,10,5 UNION ALL
SELECT 2,11,6

INSERT INTO #T2
SELECT 1,12,4 UNION ALL 
SELECT 2,12,4

;WITH T1
AS
(
    SELECT ROW_NUMBER() OVER (PARTITION BY StockId ORDER BY Item1) AS RN, * 
    FROM #T1
) 
,T2
AS
(
    SELECT ROW_NUMBER() OVER (PARTITION BY StockId ORDER BY Item2) AS RN, * 
    FROM #T2
)
SELECT T1.StockId,T1.Item1,T1.Quantity1,T2.StockId,T2.Item2,T2.Quantity2
FROM T1 
FULL JOIN T2 ON T1.StockId = T2.StockId AND T1.RN = T2.RN
Автор: Sagar Shelke Размещён: 21.08.2016 02:39

1 плюс

Ваша база данных выглядит так, как будто она нуждается в переосмыслении, потому что ваши требования не так ясны, но вы можете сделать это примерно так:

select * 
from 
(select row_number() over (order by Item1) as RN, * from Table1) T1
full outer join
(select row_number() over (order by Item2) as RN, * from Table2) T2
on T1.RN = T2.RN
Автор: James Z Размещён: 20.08.2016 06:38
Вопросы из категории :
32x32