我们知道,在BOS开发中,想实现动态行转列报表,可以使用交叉分析表来实现,但交叉分析表不太灵活,比如当动态列中有需要复杂的逻辑运算来实现时就无能为力了,下面介绍使用直接SQL报表来实现,也许能给你一点启发。

以如下表数据为例,来说明如何实现:

要求实现这样的报表样式:

具体实现步骤如下:

1、使用以下存储过程随便建一个直接SQL报表「测试行列转换报表」。

CREATE   Procedure   sp_Rpt_Test
AS
SET NOCOUNT ON

SELECT FUserName 姓名,FSubject 学科,FScore 分数 FROM t_Test

SET NOCOUNT OFF

GO

2、使用如下SQL语句在数据库中找到此SQL报表的ID。

select FReportID,* from ICClassSQLReport where FName_CHS ='测试行列转换报表'

3、修改创建此SQL报表的存储过程,注意将下面语句中的「3AB197CF-443E-4555-B0F7-BD3971C50819」这个UUID替换为第二步中你自己的SQL报表的「FReportID」:

ALTER   Procedure   sp_Rpt_Test
AS
SET NOCOUNT ON

DECLARE @vSQL VARCHAR(MAX)
DECLARE @vColumn VARCHAR(MAX)
DECLARE @vSumColumn VARCHAR(MAX)

SET @vSQL=''
SET @vColumn=''
SET @vSumColumn=''

SELECT @vColumn=@vColumn+','+FSubject+'',@vSumColumn=@vSumColumn+'+ISNULL(['+FSubject+'],0)'
FROM t_Test GROUP BY FSubject ORDER BY FSubject

SET @vSQL='SELECT *,'+STUFF(@vSumColumn,1,1,'')+' [总分数] INTO t_Rpt_Test FROM(
    SELECT FUserName 姓名,FSubject,FScore FROM t_Test ) t
    PIVOT(SUM(FScore) FOR FSubject IN('+STUFF(@vColumn,1,1,'')+')) tt'

EXEC(@vSQL)

DECLARE @FSequence INT
DECLARE @FValue VARCHAR(50)
SET @vSQL=''
DELETE ICClassSQLReportDesc WHERE FReportID='3AB197CF-443E-4555-B0F7-BD3971C50819'
DECLARE t_Cur CURSOR FOR select FSequence,FValue from dbo.fn_SplitStringToTable('姓名'+ @vColumn +',总分数',',')
OPEN t_Cur
FETCH NEXT FROM t_Cur INTO @FSequence,@FValue   
WHILE(@@FETCH_STATUS=0)
BEGIN
    IF @FSequence=1
    SET @vSQL=@vSQL+'insert into ICClassSQLReportDesc ( FCanInput,FColCaption_CHS,FColCaption_CHT,FColCaption_EN,FColName,FColType,FCondition,FContrlExt,FDSPFieldName,FFNDFieldName,FFormat,FLookUpClassID,FLookUpType,FMustInput,FNeedFilter,FReportID,FSRCFieldName,FSRCTableName,FSRCTableNameAs,FTableID,FVisible ) values
                (''1'',  '''+@FValue+''',  '''+@FValue+''',  '''+@FValue+''',  '''+@FValue+''',  1,  '''',  0,  '''',  '''',  '''',  0,  0,  ''0'',  ''1'',  ''{3AB197CF-443E-4555-B0F7-BD3971C50819}'',  '''',  '''',  '''',  -1,  1)'
    ELSE
    SET @vSQL=@vSQL+'insert into ICClassSQLReportDesc ( FCanInput,FColCaption_CHS,FColCaption_CHT,FColCaption_EN,FColName,FColType,FCondition,FContrlExt,FDSPFieldName,FFNDFieldName,FFormat,FLookUpClassID,FLookUpType,FMustInput,FNeedFilter,FReportID,FSRCFieldName,FSRCTableName,FSRCTableNameAs,FTableID,FVisible ) values
                (''1'',  '''+@FValue+''',  '''+@FValue+''',  '''+@FValue+''',  '''+@FValue+''',  3,  '''',  0,  '''',  '''',  '''',  0,  0,  ''0'',  ''1'',  ''{3AB197CF-443E-4555-B0F7-BD3971C50819}'',  '''',  '''',  '''',  -1,  1)'
    
    FETCH NEXT FROM t_Cur INTO @FSequence,@FValue   
END
CLOSE t_Cur
DEALLOCATE t_Cur

EXEC(@vSQL)

SELECT * FROM t_Rpt_Test

DROP TABLE t_Rpt_Test

SET NOCOUNT OFF

GO

完毕,运用一下看看效果,是不是完美实现?举一反三,亲自动手做一个试试。

金蝶K3直接SQL报表实现动态行转列报表相关推荐

  1. mysql行转列sql函数_sql动态行转列的两种方法

    第一种方法: 代码如下: select *from ( select Url,case  when  Month=01 then  '1月' when  Month=02 then '2月' when ...

  2. 不固定列动态行转列SQL

    行转列在sql的应用中比较常用,但现在互联网数据应用中,往往获取的都是json,而且里面的字段解析出来后列都是不固定的,多的话几百个字段都不出奇,经常我们要根据这些字段进行汇总,就涉及到了动态行转列的 ...

  3. sql 纵向求和_【IT专家】SQL2000 动态行转列+ 横向纵向合计的问题

    本文由我司收集整编,推荐下载,如有疑问,请与我司联系 SQL2000 动态行转列 + 横向纵向合计的问题 2014/07/25 10 动态行转列 + 横向纵向合计 createtabletb( 姓名 ...

  4. Excel实现动态行转列(数据透视表)

    固定行转列比较容易实现. 但是动态行转列的需求,用SQL都难以实现,要不然就是超级复杂. 不过很多第三方工具都已经提供了很好的支持,不一定非得用SQL实现.比如帆软报表和Excel. 最近接到一个比较 ...

  5. mssql 动态行转列。

    mssql 动态行转列. create table #a (a int , b char(4)) insert into #a select 1,'张三' insert into #a select ...

  6. mysql动态行转列函数_[MSSQL]采用pivot函数实现动态行转列

    环境要求:2005+ 在日常需求中经常会有行转列的事情需求处理,如果不是动态的行,那么我们可以采取case when 罗列处理. 在sql 2005以前处理动态行或列的时候,通常采用拼接字符串的方法处 ...

  7. Oracle pivot函数动态行转列方法

    起因 工作中遇到个问题,需要支持动态行转列,方便报表展示. 起初这样写:

  8. mysql中将列动态转换为行,mysql 行转列 MySQL数据库动态行转列

    想把mysql一个表的行转成列,图1是原表,想实现图2的样式SELECT MAX(CAS就是一个动态的行列转换 CREATE TABLE `c_wssb_zz` ( `aa011` varchar(1 ...

  9. 动态行转列:处理不确定数量的行转列操作

    目录 介绍 分析过程 数据样例 开始动手 添加辅助列 全连接换左连接 完成静态SQL 将动态部分设置到变量 改编为动态SQL 验证 总结 介绍 行转列操作是一种常见的数据转换技术,它可以将原始的行数据 ...

最新文章

  1. 潘通色卡tcx电子版_【收藏】最全“潘通色卡电子版”,只带手机对色一步到位!...
  2. Azure 6 月新公布
  3. java设计模式_备忘录模式
  4. 互信息python代码_转:标准化互信息NMI计算步骤及其Python实现
  5. SpringBoot多跨域请求的支持(JSONP)
  6. SPSS 虚拟变量(图文+数据集)【SPSS 038期】
  7. python3 爬妹子图片网站实战 代码简明易懂
  8. idea导入导出 settings 设置文件
  9. 我的AI之路(52)--如何制作自己的UCF101数据集
  10. 易语言python支持库_易语言python
  11. 大班科学电子计算机,计算器教案
  12. 八,分隔符,其他符号和数据的讲解
  13. SAP-MM-PA精解分析系列之基本介绍(01)-采购基本流程
  14. MariaDB的官方手册译文
  15. Touch panel DTS 分析(MSM8994平台,Atmel 芯片)
  16. Docker学习(四):Dockerfile
  17. IonCube Loaders 在Linux系统中的安装(PHP加密/解密工具)
  18. 多消费者(多线程)对MNS的使用
  19. python爬取歌词生成词云图_爬取毛不易歌词作词云展示
  20. AD最新版本ad22,如何添加封装到库中

热门文章

  1. 电商平台业务及架构演变史
  2. IMX6 EMMC、SD卡启动引脚配置及uboot修改为SD2启动
  3. 构造函数与方法的区别
  4. php 电话中转 保护用户隐私,打车APP的隐私保护通话是如何保护用户号码隐私的...
  5. 斐讯 K3C V32.1.45.267 V1.1官改升级操作
  6. 如何强制卸载阿里云盾(安骑士)监控及屏蔽云盾IP检测附带教程
  7. xiuno开发文档_觅道文档开始支持富文本编辑器
  8. Nordic最新推出nRF52系列PCB无线SoC产品nRF52805,支持蓝牙5.2
  9. Unity AssetBundle爬坑手记 - 夜阑卧听风吹雨
  10. C4(1) 三字棋代码实现