找回密码
 立即注册

QQ登录

只需一步,快速开始

jyx7711055

高级会员

186

主题

496

帖子

1604

积分

高级会员

积分
1604

微信认证勋章

jyx7711055
高级会员   /  发表于:2021-6-24 20:18  /   查看:1797  /  回复:8
20金币
本帖最后由 jyx7711055 于 2021-6-24 20:20 编辑


求个红色表转绿色表的SQL查询语句,红色表只要有的出库时间(按月合并),绿色表都要显示列(按月合并)
附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

最佳答案

查看完整内容

首先创建一个按月份汇总的临时表,然后再使用sql的动态行转列,代码如上,亲测有效。

8 个回复

正序浏览
Joe.xu讲师达人认证 悬赏达人认证 活字格认证
超级版主   /  发表于:2021-6-25 08:53:43
9#
感谢大佬的支持!
如果您的问题已解决,请及时更新帖子的状态为“已处理”,并设置最佳答案给有帮助到你的回复;
如果您的问题还未解决,欢迎跟帖补充;
如果您有新的问题,也欢迎创建新的求助帖呦。
回复 使用道具 举报
天朝四周处悬赏达人认证 活字格认证
金牌服务用户   /  发表于:2021-6-24 21:46:52
8#
毛毛 发表于 2021-6-24 21:46
你百度一下SQLServer行列转换PIVOT函数,有详细说明

豁然开朗,非常感谢!
回复 使用道具 举报
毛毛
金牌服务用户   /  发表于:2021-6-24 21:46:19
7#
天朝四周处 发表于 2021-6-24 21:27
大佬,能麻烦给几行注释不,研究了半天,还没研究清楚
看懂了,quotename、pivot两个函数是第一次接 ...

你百度一下SQLServer行列转换PIVOT函数,有详细说明
回复 使用道具 举报
天朝四周处悬赏达人认证 活字格认证
金牌服务用户   /  发表于:2021-6-24 21:27:10
6#
本帖最后由 天朝四周处 于 2021-6-24 21:45 编辑
毛毛 发表于 2021-6-24 20:56
首先创建一个按月份汇总的临时表,然后再使用sql的动态行转列,代码如上,亲测有效。

大佬,能麻烦给几行注释不,研究了半天,还没研究清楚
看懂了,quotename、pivot两个函数是第一次接触,真惭愧,但确实是好东西。
我刚才还在想,这个日期的列不能动态生成该怎么搞呢。
回复 使用道具 举报
jyx7711055
高级会员   /  发表于:2021-6-24 21:03:20
5#
十分感谢,我明天试试
回复 使用道具 举报
jyx7711055
高级会员   /  发表于:2021-6-24 20:53:43
3#
是的
回复 使用道具 举报
天朝四周处悬赏达人认证 活字格认证
金牌服务用户   /  发表于:2021-6-24 20:43:14
2#
本帖最后由 天朝四周处 于 2021-6-24 20:59 编辑

按月汇总是吧?
楼下这个不错
回复 使用道具 举报
最佳答案
最佳答案
毛毛
金牌服务用户   /  发表于:2021-6-24 20:18:30
来自 4#
本帖最后由 毛毛 于 2021-6-24 21:00 编辑
  1. SELECT
  2. 公司
  3. ,convert(varchar(7),出库时间, 120) 月份
  4. ,sum(金额) 金额 into #temp
  5. FROM tb
  6. group by 公司,convert(varchar(7),出库时间, 120)


  7. DECLARE @sql_str VARCHAR(8000)
  8. DECLARE @sql_col VARCHAR(8000)

  9. SELECT @sql_col = ISNULL(@sql_col + ',','') + QUOTENAME(月份) FROM #temp GROUP BY 月份

  10. SET @sql_str = '
  11. SELECT * FROM (
  12. SELECT 公司,月份,金额 FROM #temp) p PIVOT
  13. (SUM(金额) FOR 月份 IN ( '+ @sql_col +') ) AS pvt
  14. ORDER BY pvt.公司'

  15. EXEC (@sql_str)

  16. drop table #temp
复制代码
首先创建一个按月份汇总的临时表,然后再使用sql的动态行转列,代码如上,亲测有效。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部