如何在嵌套选择中对结果进行排序,同时保持最后一行的汇总?

时间:2012-05-08 12:01:19

标签: sql sql-server

如何通过卖家名称将结果排序到以下示例中,同时保持汇总在底部?

由于分组已应用于嵌套SELECT,因此我无法使用ORDER BY,因为分组未应用于顶层我无法使用GROUPING

Click here to see the working example in SQL Fiddle.

CREATE TABLE Sales 
(
        SellerID    INT
    ,   StoreID     INT
    ,   Price       MONEY
);

CREATE TABLE Sellers 
(
        SellerID    INT
    ,   Name        VARCHAR(50)  
)

INSERT INTO Sales VALUES 
    (1, 1, 100),
    (1, 1, 100),
    (1, 1, 100),
    (2, 2, 200),
    (2, 2, 200),
    (3, 2, 250),
    (3, 2, 250),
    (3, 2, 250),
    (3, 2, 250);

INSERT INTO Sellers VALUES
    (1, 'C. Thirdplace'),
    (2, 'A. Firstplace'),
    (3, 'B. Secondplace');

SELECT  s.Name          AS Seller_Name
    ,   x.TotalSales    AS Total_Sales
FROM 
(  
    SELECT      s.SellerID AS SellerID
            ,   SUM(s.Price) AS TotalSales
    FROM        Sales s 
    GROUP BY    s.SellerID 
    WITH ROLLUP
) x
LEFT JOIN   Sellers s 
ON          s.SellerID = x.SellerID;

产生以下结果:

SELLER_NAME      TOTAL_SALES
---------------  -----------
C. Thirdplace        300
A. Firstplace        400
B. Secondplace      1000
(null)              1700

1 个答案:

答案 0 :(得分:4)

ORDER BY
  CASE WHEN seller_name IS NULL THEN 1 ELSE 0 END,
  seller_name