求助:SQL行转列后其中几列汇总的问题

学习C#+SQL 2017-07-20 03:51:28
我的行转列出数据出来了,但想对转行后的其中几列求和。
请高手指教下语句。谢谢!!

select z.code,h.name,
max(case hokan when 'WH' then zaik else 0 end) as wh,
max(case hokan when 'NK' then zaik else 0 end) as nk,
max(case hokan when 'DL' then zaik else 0 end) as dl,
max(case hokan when 'DPP' then zaik else 0 end) as dpp,
max(case hokan when 'NPP' then zaik else 0 end) as npp,

sum(wh+nk+dl) as total, -- 这里只汇总其中3列的数据,但这个地方不知怎么写。

max(case hokan when 'JP' then zaik else 0 end) as JP,
max(case hokan when 'NJP' then zaik else 0 end) as NJP,
max(case hokan when 'NJP2' then zaik else 0 end) as NJP2

from xzaik z,xhead h where z.code=h.code group by z.code,h.name
...全文
321 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
秋的红果实 2017-07-24
  • 打赏
  • 举报
回复
说下你的需求,你写的sql是对最大值进行求和,改成min是对最小值求和,不可能即是最大又是最小吧
学习C#+SQL 2017-07-24
  • 打赏
  • 举报
回复
按下面这样可以查出结果,并可指定列汇总了。 但还有个问题:数量为负数的查不出来。我把函数max改为min可以查出负数,但又不能查出正数。 正负数都要查出来并汇总,应该用什么函数呢? SELECT Code,Name,WH,NK,DL,DPP,NPP,sum(wh+nk+dl) as TOTAL,JP,NJP,NJP2 FROM (select z.code as code,h.name as Name, max(case hokan when 'WH' then zaik else 0 end) as wh, max(case hokan when 'NK' then zaik else 0 end) as nk, max(case hokan when 'DL' then zaik else 0 end) as dl, max(case hokan when 'DPP' then zaik else 0 end) as dpp, max(case hokan when 'NPP' then zaik else 0 end) as npp, min(case hokan when 'JP' then zaik else 0 end) as JP, min(case hokan when 'NJP' then zaik else 0 end) as NJP, min(case hokan when 'NJP2' then zaik else 0 end) as NJP2 from xzaik z,xhead h where z.code=h.code group by z.code,h.name) as z group by z.code,name,z.WH,z.DL,z.NK,z.DPP,z.NPP,z.JP,z.NJP,z.NJP2
学习C#+SQL 2017-07-24
  • 打赏
  • 举报
回复
把max改为sum可以全部查出来了。
学习C#+SQL 2017-07-21
  • 打赏
  • 举报
回复
还是提示列名无效。 ======================================================== 服务器: 消息 207,级别 16,状态 1,行 8 列名 'wh' 无效。 服务器: 消息 207,级别 16,状态 1,行 8 列名 'nk' 无效。 服务器: 消息 207,级别 16,状态 1,行 8 列名 'dl' 无效。 ========================================================
秋的红果实 2017-07-21
  • 打赏
  • 举报
回复
sum(wh+nk+dl) as total, ==> sum(wh) as wh_total,sum(nk) as nk_total,sum(dl) as dl_total
学习C#+SQL 2017-07-21
  • 打赏
  • 举报
回复
看不明白啊,麻烦在我的语句里修改下吧。
秋的红果实 2017-07-21
  • 打赏
  • 举报
回复
引用 4 楼 xiang1434 的回复:
还是提示列名无效。 ======================================================== 服务器: 消息 207,级别 16,状态 1,行 8 列名 'wh' 无效。 服务器: 消息 207,级别 16,状态 1,行 8 列名 'nk' 无效。 服务器: 消息 207,级别 16,状态 1,行 8 列名 'dl' 无效。 ========================================================
嗯,因为这三个字段和wh,nk,dl同时执行,所以报错,我忽略这点了 你用嵌套查询,应该可以,大致写下,你自己优化

SELECT 
Code,Name,wh,nk,dl,dpp,npp,JP,NJP,NJP2,sum(wh) as wh_total,sum(nk) as nk_total,sum(dl) as dl_total 
FROM
(select z.code as Code,h.name as Name,
 max(case hokan when 'WH' then zaik else 0 end) as wh,
 max(case hokan when 'NK' then zaik else 0 end) as nk,
 max(case hokan when 'DL' then zaik else 0 end) as dl,
 max(case hokan when 'DPP' then zaik else 0 end) as dpp,
 max(case hokan when 'NPP' then zaik else 0 end) as npp,
 max(case hokan when 'JP' then zaik else 0 end) as JP,
 max(case hokan when 'NJP' then zaik else 0 end) as NJP,
 max(case hokan when 'NJP2' then zaik else 0 end) as NJP2

 from xzaik z,xhead h where z.code=h.code group by z.code,h.name) as T
wsh_mar 2017-07-20
  • 打赏
  • 举报
回复
select
case when grouping(userName) = 1 then '合计' else cast(userName as varchar) end userName,
case when grouping(userID) = 1 and grouping(Subtotal) = 0 then '小计' else cast(Subtotal as varchar) end Subtotal,
userID, sum(Apple) as Apple, sum(Milk) as Milk, sum(Ketchup) as Ketchup, sum(Salt) as Salt, sum(SesameOil) as SesameOil, sum(SoySauce) as SoySauce, sum(SeafoodPowder) as SeafoodPowder
from CrossTable
group by
userName, userID, Subtotal
with rollup
having grouping(userName) = 1 or grouping(userID) = 1 or grouping(Subtotal) = 0




110,500

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧