2012-10-25 1 views
0

아래 구매 한 항목의 양, 할인 된 금액 및 구매 한 달/연도별로 그룹화 한 총 금액을 가져 오는 T-SQL 쿼리가 있습니다. 총계 행을 반환하도록 쿼리를 어떻게 업데이트 할 수 있습니까 총계에 금액을 더할 수 있습니까? 모든 행을 추가 할 수 있으면 좋지만 내 주 항목은 총계를 얻을 수 있어야합니다. 감사.T-SQL SUM 합계

Select DATENAME(month, [OrderDate]) + ' ' + CAST(YEAR(OrderDate) AS CHAR(4)) 
    AS [Month], 
    SUM(Amount) AS [Amount], 
    SUM(Discount1) AS [Discount 1], 
    SUM(Discount2) AS [Discount 2], 
    SUM(Amount - Discount1 - Discount2) AS [Total] 
    From 
    Orders 
    JOIN Customer on orders.cust_ky=customer.cust_ky 
    GROUP BY DATENAME(month, [OrderDate]) + ' ' + CAST(YEAR(OrderDate) AS CHAR(4)) 
    ORDER BY MAX(OrderDate) 

답변

6

는 SQL 서버의 버전에 따라, 당신은 롤업 기능 (SQL-Server를 2005 +)를 구현 할 수 있습니다

Select DATENAME(month, [OrderDate]) + ' ' + CAST(YEAR(OrderDate) AS CHAR(4)) AS [Month], 
    SUM(Amount) AS [Amount], 
    SUM(Discount1) AS [Discount 1], 
    SUM(Discount2) AS [Discount 2], 
    SUM(Amount - Discount1 - Discount2) AS [Total] 
From Orders 
JOIN Customer 
    on orders.cust_ky=customer.cust_ky 
GROUP BY ROLLUP(DATENAME(month, [OrderDate]) + ' ' + CAST(YEAR(OrderDate) AS CHAR(4))) 
ORDER BY MAX(OrderDate) 

또는이에 UNION ALL 유사한 사용할 수 있습니다, 여기서 두 번째 쿼리는 GROUP BY이없는 총계를 얻습니다.

Select DATENAME(month, [OrderDate]) + ' ' + CAST(YEAR(OrderDate) AS CHAR(4)) AS [Month], 
    SUM(Amount) AS [Amount], 
    SUM(Discount1) AS [Discount 1], 
    SUM(Discount2) AS [Discount 2], 
    SUM(Amount - Discount1 - Discount2) AS [Total] 
From Orders 
JOIN Customer 
    on orders.cust_ky=customer.cust_ky 
GROUP BY DATENAME(month, [OrderDate]) + ' ' + CAST(YEAR(OrderDate) AS CHAR(4)) 
union all 
Select 'Total', 
    SUM(Amount) AS [Amount], 
    SUM(Discount1) AS [Discount 1], 
    SUM(Discount2) AS [Discount 2], 
    SUM(Amount - Discount1 - Discount2) AS [Total] 
From Orders 
JOIN Customer 
    on orders.cust_ky=customer.cust_ky 
+0

죄송합니다. SQL Server 2000을 사용하고 있습니다. 롤업 기능을 사용할 수 있습니까? – steve

+0

SQL Server 2000 인 경우 두 번째 버전을 사용해야합니다. – Taryn

+0

UNION ALL 메서드를 시도했지만 구문 오류가 발생합니다. 'UNION'키워드 근처의 구문이 잘못되었습니다. – steve