2015-01-07 1 views
7

У меня есть хранимая процедура с помощью следующего запроса:Group By и Заказывайте с 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][email protected] 
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][email protected] 
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][email protected] 
GROUP BY CONVERT(VARCHAR(12),CREATED,102) 
ORDER BY CONVERT(VARCHAR(12),CREATED,102) 

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

+0

Вы можете заказать только общий результат объединения, а не каждого отдельного запроса. –

+0

@a_horse_with_no_name именно то, что я хочу. я смог заказать общий результат, но я не могу его группировать – HelpASisterOut

+0

Пробовали ли вы использовать псевдонимы в подзапросе, а затем группу по имени alias.field_name? – chridam

ответ

11

Вы могли бы применить 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][email protected] 
     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][email protected]) t 
GROUP BY [date] 
ORDER BY 2 
+0

Я пробовал это, конечно. Но получил недопустимое имя столбца «дата». – HelpASisterOut

+0

, вероятно, связано с измененными псевдонимами, должно работать сейчас. – Mureinik

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

  • Нет связанных вопросов^_^