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对我来说似乎不必要。