2015-01-07 15 views
7

Tôi có một thủ tục lưu trữ với các truy vấn sau đây:Nhóm Bằng và Sắp xếp theo với 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) 

tôi cần phải làm một union all, vì vậy tôi có thể nhận được tổng của kết quả nhưng từ hai bảng, và Tôi muốn kết quả được nhóm lại và sắp xếp theo cùng một cách.

này không hoạt động:

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) 

Tôi muốn đặt hàng kết quả tổng thể, và nhóm nó bằng cách ngày.

+0

Bạn chỉ có thể đặt hàng tổng thể kết quả của một công đoàn, không mỗi truy vấn cá nhân. –

+0

@a_horse_with_no_name thats chính xác những gì tôi muốn. tôi đã có thể đặt hàng kết quả tổng thể nhưng tôi không thể nhóm nó – HelpASisterOut

+0

Bạn đã thử sử dụng truy vấn con bí danh rồi nhóm theo alias.field_name? – chridam

Trả lời

11

Bạn có thể áp dụng các group byorder by sau 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

Tôi đã thử điều đó tất nhiên. Nhưng có tên cột 'ngày' không hợp lệ. – HelpASisterOut

+0

có thể liên quan đến bí danh - đã chỉnh sửa, nên hoạt động ngay bây giờ. – Mureinik

Các vấn đề liên quan