Access开发培训
网站公告
·Access专家课堂QQ群号:151711184    ·Access快速开发平台下载地址及教程    ·欢迎加入Access专家课堂微信群!    ·如何快速搜索本站文章|示例|资料    
您的位置: 首页 > 技术文章 > Access数据库-查询/SQL语句

[access查询]交叉报表处理实例

时 间:2008-06-14 08:40:57
作 者:邹建   ID:43  城市:江阴
摘 要:交叉报表处理实例
正 文:

两种比较特殊的交叉数据报表处理

--示例数据:
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')



Access软件网QQ交流群 (群号:54525238)       Access源码网店

常见问答:

技术分类:

相关资源:

专栏作家

关于我们 | 服务条款 | 在线投稿 | 友情链接 | 网站统计 | 网站帮助