2017-02-02 21 views
0

Я пытаюсь выполнить полный Outer Присоединиться к этим двум операторам Select на Microsoft SQL Server 2014, чтобы у меня была таблица, которая содержит даты, майоры и небольшие билеты. и в нем говорится, что есть синтаксическая проблема рядом с «on» в предложении Outer Join. Мне было интересно, есть ли способ решить эту проблему?Как заполнить полный Outer Присоединиться к двум операторам Select с помощью Microsoft SQL Server?

Select #mytable7.Date,#mytable9.Date, #mytable7.[Major Tickets],#mytable9.[Minor Tickets] 
from 
    (select convert(VARCHAR, EventDate1, 112) as Date, Count(FltNo1) as [Major Tickets] 
     from TicketCoupons 
     Where PaxNo='1' 
      and EventDepart = 'DET' 
      and EventDate1 >= '20160601' 
      and EventDate1 <= '20160709' 
     group by convert(VARCHAR, EventDate1, 112)) as #mytable7 

     Full Outer Join 

     (Select Date, [Minor Tickets] 
     from 
      (select convert(VARCHAR, EventDate1, 112) as Date, Count(FltNo1) as [Minor Tickets] 
      from TicketCoupons 
      Where PaxNo='1' 
        and EventArrive = 'DET' 
        and EventDate1 >= '20160601' 
        and EventDate1 <= '20160709' 
      group by convert(VARCHAR, EventDate1, 112)) as #mytable9 
     on #mytable7.Date = #mytable9.Date 
     order by #mytable7.Date 

Я очень новичок в SQL, поэтому, если это полностью отключено или невозможно, извинитесь заранее.

+1

Я не могу проверить его прямо сейчас, но попробуйте взять «#» из ваших псевдонимов. – RBarryYoung

+0

@ RBarryYoung сделаю. Цените помощь! – Alex

+1

# используется временными таблицами https://technet.microsoft.com/en-us/library/ms177399(v=sql.105).aspx – McNets

ответ

1

Существует недостающее скобка в полное внешнее соединение подзапрос:

(Select Date, [Minor Tickets] 
     from 
      (select convert(VARCHAR, EventDate1, 112) as Date, Count(FltNo1) as [Minor Tickets] 
      from TicketCoupons 
      Where PaxNo='1' 
        and EventArrive = 'DET' 
        and EventDate1 >= '20160601' 
        and EventDate1 <= '20160709' 
      group by convert(VARCHAR, EventDate1, 112)) <---- here !! 
) as #mytable9 
on #mytable7.Date = #mytable9.Date 

Поскольку ON ссылается mytable7 и mytable9

Как Йерун Mostert имеет pointet, на этот запрос может быть переписан так просто:

Full Outer Join 

     (select convert(VARCHAR, EventDate1, 112) as Date, Count(FltNo1) as [Minor Tickets] 
     from TicketCoupons 
     Where PaxNo='1' 
       and EventArrive = 'DET' 
       and EventDate1 >= '20160601' 
       and EventDate1 <= '20160709' 
     group by convert(VARCHAR, EventDate1, 112)) as #mytable9 
    on #mytable7.Date = #mytable9.Date 
    order by #mytable7.Date 
+0

На самом деле, дополнительное вложение совершенно не нужно, потому что внешний 'SELECT' просто повторяет столбцы внутреннего' SELECT', поэтому еще проще просто снять это. –

+0

@McNets Это сработало! Большое вам спасибо за ваше время, помогая мне! Действительно ценю это! – Alex

+0

Я рад помочь. – McNets

1

Попробуйте это:

Select mytable7.Date,mytable9.Date, mytable7.[Major Tickets],mytable9.[Minor Tickets] 
from 
(
    select convert(VARCHAR, EventDate1, 112) as Date, Count(FltNo1) as [Major Tickets] 
    from TicketCoupons 
    Where PaxNo='1' 
     and EventDepart = 'DET' 
     and EventDate1 >= '20160601' 
     and EventDate1 <= '20160709' 
    group by convert(VARCHAR, EventDate1, 112) 
) as mytable7 

Full Outer Join 

(
    Select Date, [Minor Tickets] 
    from 
    (
     select convert(VARCHAR, EventDate1, 112) as Date, Count(FltNo1) as [Minor Tickets] 
     from TicketCoupons 
     Where PaxNo='1' 
      and EventArrive = 'DET' 
      and EventDate1 >= '20160601' 
      and EventDate1 <= '20160709' 
     group by convert(VARCHAR, EventDate1, 112) 
    ) as mytable9a 
) as mytable9 
on mytable7.Date = mytable9.Date 
order by mytable7.Date 

Было два вопроса ..

  1. Использование # для имен псевдонимов
  2. нон соответствия скобки (так что теперь у вас есть 9ы и 9 таблицы)

Кроме того, я считаю его проще писать запросы с помощью WITH - я нахожу, что мой код намного легче читать и отлаживать. Проверьте это:

;With MyTable7 As 
(
    select convert(VARCHAR, EventDate1, 112) as Date, Count(FltNo1) as [Major Tickets] 
    from TicketCoupons 
    Where PaxNo='1' 
     and EventDepart = 'DET' 
     and EventDate1 >= '20160601' 
     and EventDate1 <= '20160709' 
    group by convert(VARCHAR, EventDate1, 112) 
), 
MyTable9 As 
(
    Select Date, [Minor Tickets] 
    from 
    (
     select convert(VARCHAR, EventDate1, 112) as Date, Count(FltNo1) as [Minor Tickets] 
     from TicketCoupons 
     Where PaxNo='1' 
      and EventArrive = 'DET' 
      and EventDate1 >= '20160601' 
      and EventDate1 <= '20160709' 
     group by convert(VARCHAR, EventDate1, 112) 
    ) as MyTable9a 
) 
Select MyTable7.Date,MyTable9.Date, MyTable7.[Major Tickets],MyTable9.[Minor Tickets] 
From MyTable7 
Full Outer Join MyTable9 
    ON MyTable7.Date = MyTable9.Date 
Order by MyTable7.Date