查询:
SELECT
SUM(TotalDue), DATENAME(dw, OrderDate), COUNT(DISTINCT ProductID)
FROM Sales.SalesOrderHeader headers
INNER JOIN Sales.SalesOrderDetail details
ON headers.SalesOrderID = details.SalesOrderID
GROUP BY DATENAME(dw, OrderDate);
我目前的结果是:
560644420,8959 Wednesday 262
432484099,6362 Thursday 260
478917953,3263 Saturday 251
212585108,7496 Friday 238
457072471,4514 Monday 241
381773345,5659 Sunday 259
403492724,4161 Tuesday 235
现在我想对数据进行透视,这样我就可以将天数作为列。 问题是我不知道如何实现该结果 - 如何让第一行告诉它代表总和,第二行告诉它计算不同的 ID。
在此先感谢您的任何建议和帮助
我到目前为止的尝试,也许该查询会使您的回答更容易,因为您不必编写所有健壮的代码:
SELECT [Total], [Monday], [Tuesday]
FROM
(
SELECT SUM(TotalDue)[Total], DATENAME(dw, OrderDate) [Day], COUNT(DISTINCT ProductID)[different products]
FROM Sales.SalesOrderHeader headers
INNER JOIN Sales.SalesOrderDetail details ON headers.SalesOrderID = details.SalesOrderID
GROUP BY DATENAME(dw, OrderDate)
) as source
PIVOT(
COUNT([different products]) FOR [Day] IN ([Monday], [Tuesday])
) as pivoted;
我的预期结果(日期顺序不重要):
Monday Tuesday Wednesday ...
Sums of orders 457072471,4514 403492724,4161 560644420,8959
Different items count 241 235 262
最佳答案
你可以只联合两个数据透视表来做到这一点..
Select Totals,Monday ,Tuesday from (
SELECT 'TotalSum' As Totals, [Monday] as Monday, [Tuesday]
FROM
(
SELECT sum(Totaldue) As TotalDue, DATENAME(dw, OrderDate) [Day]
FROM Sales.SalesOrderHeader headers
INNER JOIN Sales.SalesOrderDetail details ON headers.SalesOrderID = details.SalesOrderID
group by DATENAME(dw, OrderDate)
) as source
PIVOT(
sum(TotalDue) FOR [Day] IN ([Monday], [Tuesday])
) as pivoted
union all
SELECT 'TotalCount' As Totals, [Monday] as Monday, [Tuesday]
FROM
(
SELECT DATENAME(dw, OrderDate) [Day], count(distinct ProductID) as DistinctProduct
FROM Sales.SalesOrderHeader headers
INNER JOIN Sales.SalesOrderDetail details ON headers.SalesOrderID = details.SalesOrderID
group by DATENAME(dw, OrderDate)
) as source
PIVOT(
sum(DistinctProduct) FOR [Day] IN ([Monday], [Tuesday])
)as pivoted
) x
关于sql - 数据透视问题,SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49148576/