Группировать и упорядочивать с помощью UNION ALL

У меня есть хранимая процедура со следующим запросом:

SELECT (sum(addition)) AS [COUNT], 
MAX(CONVERT(VARCHAR(12),CREATED,102)) as [date]
FROM [TABLE_ONE]
WHERE convert(VARCHAR(12),CREATED,102) BETWEEN CONVERT(date,@startdate) AND CONVERT(date,@enddate)
AND [ServiceID]=@serid
GROUP BY CONVERT(VARCHAR(12),CREATED,102) 
ORDER BY  CONVERT(VARCHAR(12),CREATED,102)  

Мне нужно сделать union all, чтобы я мог получить сумму результатов, но из ДВУХ таблиц, и я хочу, чтобы результат был сгруппирован и упорядочен одинаково.

Это не работает:

SELECT (sum(addition)) AS [COUNT], 
MAX(CONVERT(VARCHAR(12),CREATED,102)) as [date]
FROM [TABLE_ONE]
WHERE convert(VARCHAR(12),CREATED,102) BETWEEN CONVERT(date,@startdate) AND CONVERT(date,@enddate)
AND [ServiceID]=@serid
GROUP BY CONVERT(VARCHAR(12),CREATED,102) 
ORDER BY  CONVERT(VARCHAR(12),CREATED,102)  

UNION ALL

SELECT (sum(addition)) AS [COUNT], 
MAX(CONVERT(VARCHAR(12),CREATED,102)) as [date]
FROM [TABLE_TWO]
WHERE convert(VARCHAR(12),CREATED,102) BETWEEN CONVERT(date,@startdate) AND CONVERT(date,@enddate)
AND [ServiceID]=@serid
GROUP BY CONVERT(VARCHAR(12),CREATED,102) 
ORDER BY  CONVERT(VARCHAR(12),CREATED,102) 

Я хочу упорядочить общий результат и сгруппировать его по дате.


person HelpASisterOut    schedule 07.01.2015    source источник
comment
Вы можете заказать только общий результат объединения, а не каждый отдельный запрос.   -  person a_horse_with_no_name    schedule 07.01.2015
comment
@a_horse_with_no_name это именно то, что я хочу. я смог упорядочить общий результат, но не могу его сгруппировать   -  person HelpASisterOut    schedule 07.01.2015
comment
Вы пытались использовать подзапрос с псевдонимом, а затем группировать по псевдониму.field_name?   -  person chridam    schedule 07.01.2015


Ответы (1)


Вы можете применить group by и order by после union all:

SELECT  (SUM(addition)) AS [COUNT], MAX([date]) AS [max_date]
FROM    (SELECT addition, CONVERT(VARCHAR(12),CREATED,102)) as [date]
         FROM   [TABLE_ONE]
         WHERE  CONVERT(VARCHAR(12),CREATED,102) 
                    BETWEEN CONVERT(date,@startdate) AND 
                            CONVERT(date,@enddate)
                AND [ServiceID]=@serid 
         UNION ALL
         SELECT addition, (CONVERT(VARCHAR(12),CREATED,102)) as [date]
         FROM   [TABLE_TWO]
         WHERE  CONVERT(VARCHAR(12),CREATED,102) 
                    BETWEEN CONVERT(date,@startdate) AND 
                            CONVERT(date,@enddate)
                AND [ServiceID]=@serid) t
GROUP BY [date]
ORDER BY 2
person Mureinik    schedule 07.01.2015
comment
Я попробовал это, конечно. Но получил неверное имя столбца «дата». - person HelpASisterOut; 07.01.2015