Tsql T-SQL结果列表加上一行,其中包含不太重要的值的摘要

Tsql T-SQL结果列表加上一行,其中包含不太重要的值的摘要,tsql,Tsql,表的填充方式如下所示 CustomerName SalesValue CusA 100 CusB 250 CusC 900 CusD 1200 CusE 2500 我想要一个查询,如果每个客户的价值超过1000,它

表的填充方式如下所示

CustomerName                  SalesValue
CusA                          100
CusB                          250
CusC                          900
CusD                          1200
CusE                          2500
我想要一个查询,如果每个客户的价值超过1000,它将列出我所有客户的销售价值。如果更少,那么我只想看到一个摘要行,指示所有客户的总价值您可以做到:

  DECLARE @LargeCustomersSum INT

  SELECT @LargeCustomersSum = SUM(SalesValue)
  FROM YourTable
  WHERE SalesValue >= 1000

  DECLARE @SmallCustomersSum INT

  SELECT @SmallCustomersSum = SUM(SalesValue)
  FROM YourTable
  WHERE SalesValue <= 1000

  SELECT 'Large Value Customers', @LargeCustomersSum
  UNION   
  SELECT CustomerName, SalesValue
  FROM YourTable
  ORDER BY SalesValue DESC
  WHERE SalesValue >= 1000

  UNION
  SELECT 'Small Value Customers', @SmallCustomersSum
  UNION   
  SELECT CustomerName, SalesValue
  FROM YourTable
  ORDER BY SalesValue DESC
  WHERE SalesValue <= 1000

  UNION
  SELECT 'Total', @LargeCustomersSum + @SmallCustomersSum
你可以做:

  DECLARE @LargeCustomersSum INT

  SELECT @LargeCustomersSum = SUM(SalesValue)
  FROM YourTable
  WHERE SalesValue >= 1000

  DECLARE @SmallCustomersSum INT

  SELECT @SmallCustomersSum = SUM(SalesValue)
  FROM YourTable
  WHERE SalesValue <= 1000

  SELECT 'Large Value Customers', @LargeCustomersSum
  UNION   
  SELECT CustomerName, SalesValue
  FROM YourTable
  ORDER BY SalesValue DESC
  WHERE SalesValue >= 1000

  UNION
  SELECT 'Small Value Customers', @SmallCustomersSum
  UNION   
  SELECT CustomerName, SalesValue
  FROM YourTable
  ORDER BY SalesValue DESC
  WHERE SalesValue <= 1000

  UNION
  SELECT 'Total', @LargeCustomersSum + @SmallCustomersSum
这是一个问题

 select SalesValue, CustomerName from cus_sales where SalesValue > 1000
 UNION 
  select sum(SalesValue) as Sum, 'Others' as CustomerName from cus_sales where SalesValue <= 1000 
 UNION 
 select sum(SalesValue) as Sum, 'Total' as CustomerName from cus_sales

以下是查询

 select SalesValue, CustomerName from cus_sales where SalesValue > 1000
 UNION 
  select sum(SalesValue) as Sum, 'Others' as CustomerName from cus_sales where SalesValue <= 1000 
 UNION 
 select sum(SalesValue) as Sum, 'Total' as CustomerName from cus_sales

也许:

WITH sales AS
(
    SELECT [CustomerName], [SalesValue],
       CustSales = SUM(SalesValue)OVER(PARTITION BY CustomerName)
    FROM dbo.Sales
)
SELECT CustomerName, CustSales FROM(
  SELECT 1 AS Source, 
       CustomerName, 
       CustSales = SUM(CustSales) FROM sales 
  GROUP BY  CustomerName
  HAVING SUM(CustSales) > 1000

  UNION ALL

  SELECT 2 As Source, 
       CustomerName = '(Small Value Customers)', 
       CustSales = SUM(CustSales) FROM sales 
  WHERE CustSales <= 1000

  UNION ALL

  SELECT 3 As Source, 
       CustomerName = 'Total', 
       CustSales = SUM(CustSales) FROM sales 
) AS X
ORDER BY X.Source, X.CustSales DESC
也许:

WITH sales AS
(
    SELECT [CustomerName], [SalesValue],
       CustSales = SUM(SalesValue)OVER(PARTITION BY CustomerName)
    FROM dbo.Sales
)
SELECT CustomerName, CustSales FROM(
  SELECT 1 AS Source, 
       CustomerName, 
       CustSales = SUM(CustSales) FROM sales 
  GROUP BY  CustomerName
  HAVING SUM(CustSales) > 1000

  UNION ALL

  SELECT 2 As Source, 
       CustomerName = '(Small Value Customers)', 
       CustSales = SUM(CustSales) FROM sales 
  WHERE CustSales <= 1000

  UNION ALL

  SELECT 3 As Source, 
       CustomerName = 'Total', 
       CustSales = SUM(CustSales) FROM sales 
) AS X
ORDER BY X.Source, X.CustSales DESC

带的SQLServer2008+的选项

演示

或者如果不能将GROUPBY子句与ROLLUP操作一起使用

SELECT CASE WHEN SalesValue > 1000 THEN CustomerName 
            ELSE 'SmallValueCustomers' END AS CustomerName, 
       SUM(SalesValue) AS SumSalesValue
FROM dbo.sales
GROUP BY CASE WHEN SalesValue > 1000 THEN CustomerName 
              ELSE 'SmallValueCustomers' END
UNION ALL
SELECT 'Total', SUM(SalesValue)
FROM dbo.sales

带的SQLServer2008+的选项

演示

或者如果不能将GROUPBY子句与ROLLUP操作一起使用

SELECT CASE WHEN SalesValue > 1000 THEN CustomerName 
            ELSE 'SmallValueCustomers' END AS CustomerName, 
       SUM(SalesValue) AS SumSalesValue
FROM dbo.sales
GROUP BY CASE WHEN SalesValue > 1000 THEN CustomerName 
              ELSE 'SmallValueCustomers' END
UNION ALL
SELECT 'Total', SUM(SalesValue)
FROM dbo.sales

这将生成总和并仅返回一行,OP已表示他们希望所有客户显示总和这将生成总和并仅返回一行,OP表示,他们希望所有客户都显示总数。CTE和select对我来说似乎不必要。CTE和select对我来说似乎不必要。