周一至周五 : 08:30 - 17:30 客服专员电话/微信:17301649371 QQ:2627049059
微信咨询

扫码微信咨询

关注公众号

关注微信公众号

电话: 021 5161 9370
返回顶部
将行数据转为列显示的简单写法
显示全部楼层 倒序浏览 发表日期 2022-06-15 20:49:41 1773次阅读 1次回复

将行数据转为列显示的简单写法


业务中时常需要将行数据转为列数据,SQL中有很多方法可以实现,这里用一个老的方法简单实现,具体如下:

原始数据如下,是用来登记每个项目每次开票的情况

20220615204308.png

表间公式执行后得到下面的结果:

20220615204255.png


表间公式写法如下,后面是可复制的公式文本:


20220615204749.png


  1. SELECT 排除重复 [开票次数分别显示_主表].[开票项目] AS 本报表.[开票次数分别显示_明细表].[开票项目]x填充不锁定,
  2. 最大值(CASE WHEN F_52586 = '第1次' THEN F_52584 ELSE NULL END ) AS 本报表.[开票次数分别显示_明细表].[第1次]x填充不锁定,
  3. 最大值(CASE WHEN F_52586 = '第2次' THEN F_52584 ELSE NULL END ) AS 本报表.[开票次数分别显示_明细表].[第2次]x填充不锁定,
  4. 最大值(CASE WHEN F_52586 = '第3次' THEN F_52584 ELSE NULL END ) AS 本报表.[开票次数分别显示_明细表].[第3次]x填充不锁定,
  5. 最大值(CASE WHEN F_52586 = '第4次' THEN F_52584 ELSE NULL END ) AS 本报表.[开票次数分别显示_明细表].[第4次]x填充不锁定,
  6. 最大值(CASE WHEN F_52586 = '第5次' THEN F_52584 ELSE NULL END ) AS 本报表.[开票次数分别显示_明细表].[第5次]x填充不锁定,
  7. 最大值(CASE WHEN F_52586 = '第6次' THEN F_52584 ELSE NULL END ) AS 本报表.[开票次数分别显示_明细表].[第6次]x填充不锁定,
  8. 最大值(CASE WHEN F_52586 = '第7次' THEN F_52584 ELSE NULL END ) AS 本报表.[开票次数分别显示_明细表].[第7次]x填充不锁定
  9. FROM  [开票次数分别显示_主表]
  10. WHERE 1=1 并且  1= 1 分组  [开票次数分别显示_主表].[开票项目]
复制代码



解析后的公式脚本如下:

  1. SELECT
  2. F_52587 AS 开票项目,
  3. MAX(CASE WHEN F_52586 = '第1次' THEN F_52584 ELSE NULL END ) AS 第1次,
  4. MAX(CASE WHEN F_52586 = '第2次' THEN F_52584 ELSE NULL END ) AS 第2次,
  5. MAX(CASE WHEN F_52586 = '第3次' THEN F_52584 ELSE NULL END ) AS 第3次,
  6. MAX(CASE WHEN F_52586 = '第4次' THEN F_52584 ELSE NULL END ) AS 第4次,
  7. MAX(CASE WHEN F_52586 = '第5次' THEN F_52584 ELSE NULL END ) AS 第5次,
  8. MAX(CASE WHEN F_52586 = '第6次' THEN F_52584 ELSE NULL END ) AS 第6次,
  9. MAX(CASE WHEN F_52586 = '第7次' THEN F_52584 ELSE NULL END ) AS 第7次
  10. FROM T_1429
  11. WHERE 1=1
  12. GROUP BY F_52587
复制代码




电话/微信:18049989370 QQ:857188287
hessen

2022-12-27 17:01:12

  1. WITH C AS (
  2.   SELECT F_163,F_164,F_168,F_174
  3.   ,ROW_NUMBER() OVER(PARTITION BY F_163,F_164 ORDER BY F_163,F_164,F_174 ASC ) AS InComeNO
  4.   FROM T_14 WHERE F_164 <> ''
  5. )
  6. SELECT
  7. F_163 AS 项目名称,F_164 AS 房间编号,
  8. MAX(CASE WHEN InComeNO = 1 THEN F_174 ELSE NULL END ) AS 第1次收款日期,
  9. MAX(CASE WHEN InComeNO = 1 THEN F_168 ELSE NULL END ) AS 第1次收款金额,
  10. MAX(CASE WHEN InComeNO = 2 THEN F_174 ELSE NULL END ) AS 第2次收款日期,
  11. MAX(CASE WHEN InComeNO = 2 THEN F_168 ELSE NULL END ) AS 第2次收款金额,
  12. MAX(CASE WHEN InComeNO = 3 THEN F_174 ELSE NULL END ) AS 第3次收款日期,
  13. MAX(CASE WHEN InComeNO = 3 THEN F_168 ELSE NULL END ) AS 第3次收款金额,
  14. MAX(CASE WHEN InComeNO = 4 THEN F_174 ELSE NULL END ) AS 第4次收款日期,
  15. MAX(CASE WHEN InComeNO = 4 THEN F_168 ELSE NULL END ) AS 第4次收款金额
  16. FROM C
  17. WHERE 1=1
  18. GROUP BY F_163,F_164
复制代码


电话/微信:18049989370 QQ:857188287

精彩评论1

hessen

2022-12-27 17:01:12

  1. WITH C AS (
  2.   SELECT F_163,F_164,F_168,F_174
  3.   ,ROW_NUMBER() OVER(PARTITION BY F_163,F_164 ORDER BY F_163,F_164,F_174 ASC ) AS InComeNO
  4.   FROM T_14 WHERE F_164 <> ''
  5. )
  6. SELECT
  7. F_163 AS 项目名称,F_164 AS 房间编号,
  8. MAX(CASE WHEN InComeNO = 1 THEN F_174 ELSE NULL END ) AS 第1次收款日期,
  9. MAX(CASE WHEN InComeNO = 1 THEN F_168 ELSE NULL END ) AS 第1次收款金额,
  10. MAX(CASE WHEN InComeNO = 2 THEN F_174 ELSE NULL END ) AS 第2次收款日期,
  11. MAX(CASE WHEN InComeNO = 2 THEN F_168 ELSE NULL END ) AS 第2次收款金额,
  12. MAX(CASE WHEN InComeNO = 3 THEN F_174 ELSE NULL END ) AS 第3次收款日期,
  13. MAX(CASE WHEN InComeNO = 3 THEN F_168 ELSE NULL END ) AS 第3次收款金额,
  14. MAX(CASE WHEN InComeNO = 4 THEN F_174 ELSE NULL END ) AS 第4次收款日期,
  15. MAX(CASE WHEN InComeNO = 4 THEN F_168 ELSE NULL END ) AS 第4次收款金额
  16. FROM C
  17. WHERE 1=1
  18. GROUP BY F_163,F_164
复制代码


电话/微信:18049989370 QQ:857188287
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则  允许回帖邮件提醒楼主

快表软件是国内较早研究表格类软件开发平台的团队之一,迄今已有十多年的行业经验.致力于为企事业单位提供实用可靠的数字化平台。
  • 微信公众号

  • 微信小商店

  • 微信客服

  • Powered by Discuz! X3.4 | Copyright © 2022-2024, XiRong Soft. | 快表软件
  • 沪ICP备13033196号 | 营业执照 |上海西戎软件科技有限公司|沪公网安备31011502002146号|沪ICP备13033196号 |