请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

SMANG
金牌服务用户   /  发表于:2022-3-31 19:16  /   查看:1669  /  回复:9
1金币
本帖最后由 SMANG 于 2022-3-31 21:04 编辑

各位大佬,写视图将数据按条件查询显示在活字格界面,要按条件获取,相同供应商+相同品号+相同年份汇总多行数据为一行按列获取产品十二个月单价,需要如何实现,有点难啊,pivot这个函数的用法度娘说法理解不了

度娘截图
附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

最佳答案

查看完整内容

原表aaaaa的截图如下: 先创建一个试图v_aaa,将原表中的字段转换成pivot需要用到的字段: SELECT 供应商, 产品编号, YEAR(日期) AS 年份, RTRIM(CAST(MONTH(日期) AS char(2))) + '月份' AS 月份, 单价 FROM dbo.aaaaa 然后在试图v_aaa上做pivot查询操作即可得到你需要的效果: SELECT * FROM v_aaa as p pivot (avg(单价) for 月份 in ("1月份","2月份","3月份","4月份","5月份","6月份","7 ...

9 个回复

倒序浏览
最佳答案
最佳答案
handey活字格认证
初级会员   /  发表于:2022-3-31 19:16:38
来自 6#
本帖最后由 handey 于 2022-4-1 18:44 编辑

原表aaaaa的截图如下:


先创建一个试图v_aaa,将原表中的字段转换成pivot需要用到的字段:
SELECT     供应商, 产品编号, YEAR(日期) AS 年份, RTRIM(CAST(MONTH(日期) AS char(2))) + '月份' AS 月份, 单价
FROM         dbo.aaaaa



然后在试图v_aaa上做pivot查询操作即可得到你需要的效果
SELECT *  FROM         v_aaa as p
pivot (avg(单价) for 月份  in ("1月份","2月份","3月份","4月份","5月份","6月份","7月份","8月份","9月份","10月份","11月份","12月份"))
as t






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

评分

参与人数 1金币 +5 收起 理由
Lay.Li + 5 赞一个!

查看全部评分

回复 使用道具 举报
Lay.Li悬赏达人认证 活字格认证
超级版主   /  发表于:2022-4-1 12:30:47
2#
您好,这边对于sql的pivot函数不是很了解,不过您这个需求的话是可以使用case when函数去实现的,查了一些资料,给您写了个sql您可以参考参考
  1. select 供应商,产品编号,year(日期) as 日期,
  2. sum(case when month(日期)=1 then 单价 else 0 end) as "1月份",sum(case when month(日期)=2 then 单价 else 0 end) as "2月份",
  3. sum(case when month(日期)=3 then 单价 else 0 end) as "3月份",sum(case when month(日期)=4 then 单价 else 0 end) as "4月份",
  4. sum(case when month(日期)=5 then 单价 else 0 end) as "5月份",sum(case when month(日期)=6 then 单价 else 0 end) as "6月份",
  5. sum(case when month(日期)=7 then 单价 else 0 end) as "7月份",sum(case when month(日期)=8 then 单价 else 0 end) as "8月份",
  6. sum(case when month(日期)=9 then 单价 else 0 end) as "9月份",sum(case when month(日期)=10 then 单价 else 0 end) as "10月份",
  7. sum(case when month(日期)=11 then 单价 else 0 end) as "11月份",sum(case when month(日期)=12 then 单价 else 0 end) as "12月份"
  8. from A表
  9. group by 供应商,产品编号,year(日期)
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
SMANG
金牌服务用户   /  发表于:2022-4-1 14:12:03
3#
Lay.Li 发表于 2022-4-1 12:30
您好,这边对于sql的pivot函数不是很了解,不过您这个需求的话是可以使用case when函数去实现的,查了一些 ...

大佬就是大佬,心中永远的神

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
SMANG
金牌服务用户   /  发表于:2022-4-1 14:59:29
4#
Lay.Li 发表于 2022-4-1 12:30
您好,这边对于sql的pivot函数不是很了解,不过您这个需求的话是可以使用case when函数去实现的,查了一些 ...

大爱,老师做事认真负责
回复 使用道具 举报
Lay.Li悬赏达人认证 活字格认证
超级版主   /  发表于:2022-4-1 15:06:23
5#
帮助到您就好哈
后边有问题欢迎继续发帖交流
回复 使用道具 举报
SMANG
金牌服务用户   /  发表于:2022-4-1 19:01:11
7#
handey 发表于 2022-4-1 18:33
原表aaaaa的截图如下:

问题已经解决了,感谢大佬回复,一个问题多种解决方式,希望可以供后者需要学习参考
回复 使用道具 举报
SMANG
金牌服务用户   /  发表于:2022-4-1 19:12:49
8#
Lay.Li 发表于 2022-4-1 15:06
帮助到您就好哈
后边有问题欢迎继续发帖交流

大佬,麻烦抽空看一下,刚刚经检查发现数据没有根据条件合并为一行数据显示呀,如下图


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
SMANG
金牌服务用户   /  发表于:2022-4-1 19:16:36
9#
handey 发表于 2022-4-1 18:33
原表aaaaa的截图如下:

大佬,我发现你写出来的结果与上面大佬一致,如供应商+产品编号+日期年份相同时,数据合并为一条显示出来,只是单价按月份来分开取值
回复 使用道具 举报
Lay.Li悬赏达人认证 活字格认证
超级版主   /  发表于:2022-4-2 09:24:52
10#
您好,group by后面的就是分组的条件,所以您的这个表可以这样写sql

  1. select 供应商编号,供应商名称,产品编号,产品编号,year(日期) as 日期,
  2. sum(case when month(日期)=1 then 单价 else 0 end) as "1月份",sum(case when month(日期)=2 then 单价 else 0 end) as "2月份",
  3. sum(case when month(日期)=3 then 单价 else 0 end) as "3月份",sum(case when month(日期)=4 then 单价 else 0 end) as "4月份",
  4. sum(case when month(日期)=5 then 单价 else 0 end) as "5月份",sum(case when month(日期)=6 then 单价 else 0 end) as "6月份",
  5. sum(case when month(日期)=7 then 单价 else 0 end) as "7月份",sum(case when month(日期)=8 then 单价 else 0 end) as "8月份",
  6. sum(case when month(日期)=9 then 单价 else 0 end) as "9月份",sum(case when month(日期)=10 then 单价 else 0 end) as "10月份",
  7. sum(case when month(日期)=11 then 单价 else 0 end) as "11月份",sum(case when month(日期)=12 then 单价 else 0 end) as "12月份"
  8. from A表
  9. group by 供应商编号,供应商名称,产品编号,产品编号,year(日期)
复制代码


回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部