交叉报表处理实例
来源:互联网 发布:adsafe for mac 编辑:程序博客网 时间:2024/05/18 00:48
两种比较特殊的交叉数据报表处理
--示例数据:
CREATE TABLE tb(ID varchar(10),NGNO char(1),QTY int)
INSERT tb SELECT '200505','A',10
UNION ALL SELECT '200505','B',20
UNION ALL SELECT '200505','C',30
UNION ALL SELECT '200506','B',10
UNION ALL SELECT '200506','C',20
UNION ALL SELECT '200506','D',30
UNION ALL SELECT '200506','E',40
GO
交叉数据报表要求1:
按ID列分组,将NGNO列水平显示为多列,但每列由NGNO的大小顺序决定,而不是由NGNO的值决定,对于示例数据,最终的结果要求如下:
ID col1 col2 col3 col4
---------- ------- ------- ------- -------
200505 A(10) B(20) C(30)
200506 B(10) C(20) D(30) E(40)
--实现代码
DECLARE @i varchar(10),@s nvarchar(4000)
SELECT TOP 1 @s='',@I=COUNT(*) FROM tb
GROUP BY ID
ORDER BY COUNT(*) DESC
WHILE @i>0
SELECT @s=N',col'+@i
+N'=ISNULL(MAX(CASE GID WHEN '+@i
+N' THEN QTY END),'''')'+@s,
@i=@i-1
EXEC(N'SELECT ID'+@s+N'
FROM(
SELECT ID,QTY=RTRIM(NGNO)+QUOTENAME(QTY,N''()''),
GID=(SELECT COUNT(DISTINCT NGNO) FROM TB WHERE ID=a.ID AND NGNO<=a.NGNO)
FROM tb a
)a GROUP BY ID')
GO
交叉数据报表要求2:
按ID列分组,将NGNO及QTY列合并显示在一个列中,最终的结果要求如下:
ID Value
---------- -----------------------------------------------
200505 A(10) B(20) C(30)
200506 B(10) C(20) D(30) E(40)
(所影响的行数为 2 行)
--实现处理的函数
CREATE FUNCTION f_Str(@ID varchar(10))
RETURNS varchar(8000)
AS
BEGIN
DECLARE @r varchar(8000)
SET @r=''
SELECT @r=@r+SPACE(8)+RTRIM(NGNO)+QUOTENAME(QTY,'()')
FROM tb
WHERE ID=@ID
RETURN(STUFF(@r,1,8,''))
END
GO
--调用实现查询
SELECT ID,Value=dbo.f_Str(ID) FROM tb GROUP BY ID
GO
- 交叉报表处理实例
- 交叉报表处理实例
- 交叉报表处理实例
- 交叉报表处理实例
- 交叉报表处理实例
- 交叉报表处理实例
- 交叉报表处理实例
- 交叉报表处理实例
- 交叉报表处理实例
- 交叉报表处理实例
- 交叉报表处理实例
- 交叉报表处理实例
- 交叉报表处理实例
- 交叉报表处理实例
- 交叉报表处理实例
- 交叉报表处理实例
- 转:邹建--交叉报表处理实例
- 交叉报表
- JS获取下拉列表选中项的值和文本(select)以及获取单选按钮(radio)组的值和修改选中项
- HDU 1129 Do the Untwist
- 明朝那些事经典语录
- Amazone Web Service
- JS获取select对象的value Text
- 交叉报表处理实例
- TransactionScope()事务的问题
- 彻底清除.net framework
- word 插入一条横线
- word 插入一条横线
- 在临时表的指定字段前面插入字段
- 全文搜索的两个重要工具
- 根据当月数据库自动生成下个月数据库--1
- HDU 3308 LCSI 【线段树】 与 poj 3667 hotel