2014-12-28 2 views
0

Я использую SQL Server 2014, и у меня есть два опорных запроса, которые мне нужно объединить, чтобы получить конкретный вывод (подробно описанный ниже).Объединить 2 SQL-запроса для определенного вывода

Это кронштейн Запрос 1:

SELECT [PropertyCode], 

cast(cast([DECEMBER 2014]/(((SELECT rooms FROM HotelInventory c WHERE c.propertycode=pvttable.propertycode)*31.)/100.) as decimal (9,0)) as varchar) + '%' as 'Dec 2014', 
cast(cast([JANUARY 2015]/(((SELECT rooms FROM HotelInventory c WHERE c.propertycode=pvttable.propertycode)*31.)/100.) as decimal (9,0)) as varchar) + '%' as 'Jan 2015', 
cast(cast([FEBRUARY 2015]/(((SELECT rooms FROM HotelInventory c WHERE c.propertycode=pvttable.propertycode)*28.)/100.) as decimal (9,0)) as varchar) + '%' as 'Feb 2015' 


FROM (SELECT [PropertyCode], 
     [MTH], 
     [ROOM NIGHTS] 

FROM HOLDINGS 
WHERE DateOfDeparture > '2014-12-01') a 


    PIVOT (Sum([ROOM NIGHTS]) 
     FOR [MTH] IN ([DECEMBER 2014], 
         [JANUARY 2015], 
         [FEBRUARY 2015])) AS PVTTABLE 

Выхода из Разворотного запрос 1 выглядит следующим образом:

PropertyCode Dec 2014 Jan 2015 Feb 2015 
    A    75%  60%   35% 
    B    85%  78%   22% 
    C    69%  86%   38% 

Это кронштейн Запрос 2:

SELECT [PropertyCode], 

cast(cast([DECEMBER 2014]/(((SELECT rooms FROM HotelInventory c WHERE c.propertycode=BUDGETPVTTABLE.propertycode)*31.)/100.) as decimal (9,0)) as varchar) + '%' as 'Budget Dec2014', 
cast(cast([JANUARY 2015]/(((SELECT rooms FROM HotelInventory c WHERE c.propertycode=BUDGETPVTTABLE.propertycode)*31.)/100.) as decimal (9,0)) as varchar) + '%' as 'Budget Jan2015', 
cast(cast([FEBRUARY 2015]/(((SELECT rooms FROM HotelInventory c WHERE c.propertycode=BUDGETPVTTABLE.propertycode)*28.)/100.) as decimal (9,0)) as varchar) + '%' as 'Budget Feb2015' 

FROM (SELECT [PropertyCode], 
      [MTH], 
      [RN] 
    FROM Budget1415) b 

    PIVOT (Sum([RN]) 
     FOR [MTH] IN ([NOVEMBER 2014], 
         [DECEMBER 2014], 
         [JANUARY 2015], 
         [FEBRUARY 2015])) AS BUDGETPVTTABLE 

ORDER BY [PropertyCode] 

Выход из сводного Query 2 является следующим:

PropertyCode Budget Dec2014 Budget Jan2015 Budget Feb2015 
    A    95%     70%    60% 
    B    90%     89%    85% 
    C    75%     91%    80% 

Я слил Pivot запрос 1 и Pivot запрос 2 с помощью «UNION ALL», и я получаю следующий результат:

PropertyCode Dec2014 Jan2015 Feb2015 
    A    95%  70%  60% 
    A    75%  60%  35% 
    B    90%  89%  85% 
    B    85%  78%  22% 
    C    75%  91%  80% 
    C    69%  86%  38% 

Это выглядит хорошо, но я после этого конкретного проекта:

PropertyCode Budget Dec2014 Dec 2014 Budget Jan2015 Jan 2015 Budget Feb2015 Feb 2015 
    A     95%   75%   70%   60%   60%   35% 
    B     90%   85%   89%   78%   85%   22% 
    C     75%   69%   91%   86%   80%   38% 

ответ

0

Как насчет проведения join?

with q1 as (<query1 here without order by), 
    q2 as (<query2 here without order by>) 
select q1.PropertyCode, 
     q1.Dec2014 as Budget_Dec2014, q2.Dec2014, 
     q1.Dec2014 as Budget_Jan2015, q2.Jan2015, 
     q1.Dec2014 as Budget_Feb2015, q2.Feb2015 
from q1 join 
    q2 
    on q1.PropertyCode = q2.PropertyCode; 
+0

Спасибо, но я получаю следующее сообщение об ошибке: «Msg 319, Level 15, State 1, Line 3 Неправильный синтаксис около ключевого слова„с“Если это утверждение является общим выражением таблицы, клаузула XMLNAMESPACES. или предложение контекста изменения отслеживания, предыдущий оператор должен быть прерван точкой с запятой ». – user3115933

+0

Извините ... Я написал предложение «WITH» рядом с q2 тоже! Редактирование моего кода, и я вернусь к вам! :-) – user3115933

+0

Я изменил ваши коды следующим образом, и они отлично работали: выбрать q1.PropertyCode, q1. [Декабрь 2014] как 'декабрь 2014', q2. [Бюджет декабрь 2014], q1. [Январь 2015] как «январь 2015 года», q2. [Бюджет Январь 2015], q1. [февраль 2015] как «февраль 2015», q2. [Бюджет февраль 2015] Большое спасибо, Гордон! – user3115933

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