如何解决如何在 SQL Pivot 查询中编写“具有”条件?
select * from
(
SELECT datename( Month,soh.OrderDate)[Month],sd.OrderQty as orderQty
from Sales.SalesOrderHeader soh
join Sales.SalesOrderDetail sd
on soh.SalesOrderID = sd.SalesOrderID
)t
pivot(
sum(orderQty)
for [month] in ([january],[february],[march],[april],[may],[june],[july],[august],[september],[october],[november],[december]) )as pivot_table
此查询基于月份提供 TotalOrderQuantity,但我必须按条件过滤: 有 SUM(sd.OrderQty)>50
我没有旋转的查询是这样的:
SELECT datename( Month,SUM(sd.OrderQty) as orderQty
from Sales.SalesOrderHeader soh
join Sales.SalesOrderDetail sd
on soh.SalesOrderID = sd.SalesOrderID
group by datename( Month,soh.OrderDate)
having SUM(sd.OrderQty)>50
解决方法
在数据透视表中使用正确的查询:-
select * from
(
SELECT datename( Month,soh.OrderDate)[Month],SUM(sd.OrderQty) as orderQty
from Sales.SalesOrderHeader soh
join Sales.SalesOrderDetail sd
on soh.SalesOrderID = sd.SalesOrderID
group by datename( Month,soh.OrderDate)
having SUM(sd.OrderQty)>50
)t
pivot(
sum(orderQty)
for [month] in ([january],[february],[march],[april],[may],[june],[july],[august],[september],[october],[november],[december]) )as pivot_table
,
使用条件聚合:
select sum(case when month(soh.OrderDate) = 1 then sd.OrderQty end) as jan,sum(case when month(soh.OrderDate) = 2 then sd.OrderQty end) as feb,. . .
sum(case when month(soh.OrderDate) = 12 then sd.OrderQty end) as dec
from Sales.SalesOrderHeader soh join
Sales.SalesOrderDetail sd
on soh.SalesOrderID = sd.SalesOrderID
having sum(sd.OrderQty) > 50;
我强烈怀疑您想要结果集中的多行,在这种情况下,您将有一个显式的 GROUP BY
:
select <something>
sum(case when month(soh.OrderDate) = 1 then sd.OrderQty end) as jan,. . . -- fill in the other months here
sum(case when month(soh.OrderDate) = 12 then sd.OrderQty end) as dec
from Sales.SalesOrderHeader soh join
Sales.SalesOrderDetail sd
on soh.SalesOrderID = sd.SalesOrderID
group by <something>
having sum(sd.OrderQty) > 50;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。