2015-09-14 5 views
1
Select No, A, B, C into #temp1 from Table1 Where month = 'Jan' 
Select No, D, E, F into #temp2 from Table2 Where month = 'Jan' 
Select No, G, H, I into #temp3 from Table3 Where month = 'Jan' 

И количество строк результат вSQL Server - Регистрация запрос

#temp1 = 0 
#temp2 = 0 
#temp3 = 2 

* обратите внимание, что количество строк результат будет варьироваться в базе на месяц выбранного

Я хочу объединить результаты три таблицы в один выход, который, как показано ниже:

No | A | B | C | D | E | F | G | H | I 
---------------------------------------- 

Я попытался:

Select t1.No, t1.A, t1.B, t1.C, t2.D, t2.E, t2.F, t3.G, t3.H, t3.I 
From #temp1 t1 
Left Join #temp2 t2 on t1.No = t2.No 
Left Join #temp3 t3 on t1.No = t3.No 

Но я знаю, что запрос является неправильным, потому что не будет никакого вывода, так как нет никакого результата в таблице # temp1

Пожалуйста, помогите. Спасибо

+2

Предполагая, что 'No' уникален вам необходимо полное внешнее соединение между всеми тремя или' UNION ALL' во всех трех с агрегатной функцией, чтобы раздавить их вместе –

+0

@ Nick.McDermaid - Да, спасибо за СОЮЗА ВСЕ. Теперь я могу получить результат так, как я хотел, но если вы сможете больше объяснить полное внешнее соединение. Я пробовал полное внешнее соединение, но как я могу получить вывод для отображения «Нет», поскольку я закодировал его как t1.No, но результат будет t3.No. На выходе будет отображаться поле NULL в поле «Нет». – Dia

ответ

3

Вы можете использовать Full Outer Join для своего случая. Попробуй вот так.

CREATE TABLE #temp1 
    (
    no INT, 
    A  VARCHAR(10), 
    B  VARCHAR(10), 
    C  VARCHAR(10), 
    MONTH VARCHAR(10) 
) 

CREATE TABLE #temp2 
    (
    no INT, 
    D  VARCHAR(10), 
    E  VARCHAR(10), 
    F  VARCHAR(10), 
    MONTH VARCHAR(10) 
) 

CREATE TABLE #temp3 
    (
    no INT, 
    G  VARCHAR(10), 
    H  VARCHAR(10), 
    I  VARCHAR(10), 
    MONTH VARCHAR(10) 
) 

INSERT INTO #temp3 
VALUES  (1, 
      'G1', 
      'H1', 
      'I1', 
      'Jan'), 
      (2, 
      'G2', 
      'H2', 
      'I2', 
      'Jan') 

    SELECT coalesce(t1.No,t2.no,t3.no) as No, 
     t1.A, 
     t1.B, 
     t1.C, 
     t2.D, 
     t2.E, 
     t2.F, 
     t3.G, 
     t3.H, 
     t3.I 
FROM #temp1 t1 
     FULL OUTER JOIN #temp2 t2 
        ON t1.No = t2.No 
     FULL OUTER JOIN #temp3 t3 
        ON t1.No = t3.No 
+1

Здесь столбец 'No' будет' null'. OP упомянул, что '# temp1' имеет 0 строк. – Wanderer

+1

Это может быть случай для 'SELECT COALESCE (t1.No, t2.No, t3.No), t1.A, ...' –

+0

@ Майкл: Да, вы правы. Я отредактировал мой оператор select. Спасибо – StackUser

0

Если вы хотите показать весь результат, ваш запрос может быть ниже, но если ваша цель отличается, пожалуйста, объясните это немного больше.

Select t1.No, t1.A, t1.B, t1.C, t2.D, t2.E, t2.F, t3.G, t3.H, t3.I 
    From #temp1 t1, #temp2 t2 , #temp3 t3 
+0

Да, я хочу показать весь результат. Я пробовал ваш запрос, но результат равен нулю/нет вывода, что неверно, потому что у меня есть два данных в t3 для отображения – Dia

+0

@Dia: Я вижу, что на ваш вопрос ответили. Если вам нужна дополнительная помощь, напишите. – Touareg

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