加入收藏 | 设为首页 | 会员中心 | 我要投稿 银川站长网 (https://www.0951zz.com/)- 云通信、基础存储、云上网络、机器学习、视觉智能!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SqlServer中怎么生成多维数据集 具体方法是什么

发布时间:2023-06-01 10:56:57 所属栏目:MsSql教程 来源:
导读:这篇文章给大家分享的是SqlServer中怎么生成多维数据集,详细方法是什么。小编觉得挺实用的,因此分享给大家做个参考,文中的介绍得很详细,而要易于理解和学习,有需要的朋友可以参考,接下来就跟随小编一起了解看看

这篇文章给大家分享的是SqlServer中怎么生成多维数据集,详细方法是什么。小编觉得挺实用的,因此分享给大家做个参考,文中的介绍得很详细,而要易于理解和学习,有需要的朋友可以参考,接下来就跟随小编一起了解看看吧。

1、cube:生成多维数据集,包含各维度可能组合的交叉表格,使用with 关键字连接 with cube

根据需要使用union all 拼接

判断 某一列的null值来自源数据还是 cube 使用GROUPING关键字

GROUPING([档案号]) = 1 : null值来自cube(代表所有的档案号)

GROUPING([档案号]) = 0 : null值来自源数据

举例:

SELECT * INTO ##GET

FROM

(SELECT *

FROM ( SELECT

CASE

WHEN (GROUPING([档案号]) = 1) THEN

'合计'

ELSE [档案号]

END AS '档案号',

CASE

WHEN (GROUPING([系列]) = 1) THEN

'合计'

ELSE [系列]

END AS '系列',

CASE

WHEN (GROUPING([店长]) = 1) THEN

'合计'

ELSE [店长]

END AS '店长', SUM (剩余次数) AS '总剩余',

CASE

WHEN (GROUPING([店名]) = 1) THEN

'合计'

ELSE [店名]

END AS '店名'

FROM ##PudianCard

GROUP BY [档案号], [店名], [店长], [系列]

WITH cube

HAVING GROUPING([店名]) != 1

AND GROUPING([档案号]) = 1 --AND GROUPING([系列]) = 1 ) AS M

UNION

ALL

(SELECT *

FROM ( SELECT

CASE

WHEN (GROUPING([档案号]) = 1) THEN

'合计'

ELSE [档案号]

END AS '档案号',

CASE

WHEN (GROUPING([系列]) = 1) THEN

'合计'

ELSE [系列]

END AS '系列',

CASE

WHEN (GROUPING([店长]) = 1) THEN

'合计'

ELSE [店长]

END AS '店长', SUM (剩余次数) AS '总剩余',

CASE

WHEN (GROUPING([店名]) = 1) THEN

'合计'

ELSE [店名]

END AS '店名'

FROM ##PudianCard

GROUP BY [档案号], [店名], [店长], [系列]

WITH cube

HAVING GROUPING([店名]) != 1

AND GROUPING([店长]) != 1 ) AS P )

UNION

ALL

(SELECT *

FROM ( SELECT

CASE

WHEN (GROUPING([档案号]) = 1) THEN

'合计'

ELSE [档案号]

END AS '档案号',

CASE

WHEN (GROUPING([系列]) = 1) THEN

'合计'

ELSE [系列]

END AS '系列',

CASE

WHEN (GROUPING([店长]) = 1) THEN

'合计'

ELSE [店长]

END AS '店长', SUM (剩余次数) AS '总剩余',

CASE

WHEN (GROUPING([店名]) = 1) THEN

'合计'

ELSE [店名]

END AS '店名'

FROM ##PudianCard

GROUP BY [档案号], [店名], [店长], [系列]

WITH cube

HAVING GROUPING([店名]) != 1

AND GROUPING([店长]) != 1 ) AS W )

UNION

ALL

(SELECT *

FROM ( SELECT

CASE

WHEN (GROUPING([档案号]) = 1) THEN

'合计'

ELSE [档案号]

END AS '档案号',

CASE

WHEN (GROUPING([系列]) = 1) THEN

'合计'

ELSE [系列]

END AS '系列',

CASE

WHEN (GROUPING([店长]) = 1) THEN

'合计'

ELSE [店长]

END AS '店长', SUM (剩余次数) AS '总剩余',

CASE

WHEN (GROUPING([店名]) = 1) THEN

'合计'

ELSE [店名]

END AS '店名'

FROM ##PudianCard

GROUP BY [档案号], [店名], [店长], [系列]

WITH cube

HAVING GROUPING([店名]) = 1

AND GROUPING([店长]) = 1

AND GROUPING([档案号]) = 1 ) AS K ) ) AS T

2、rollup:功能跟cube相似

3、将某一列的数据作为列名,动态加载,使用存储过程,拼接字符串

DECLARE @st nvarchar (MAX) = '';SELECT @st =@st + 'max(case when [系列]=''' + CAST ([系列] AS VARCHAR) + ''' then [总剩余] else null end ) as [' + CAST ([系列] AS VARCHAR) + '],'

FROM ##GET

GROUP BY [系列]; print @st;

4、根据某一列分组,分别建表

SELECT

'select ROW_NUMBER() over(order by [卡项] desc) as [序号], [会员],[档案号],[卡项],[剩余次数],[员工],[店名] into ' + ltrim([店名]) + ' from 查询 where [店名]=''' + [店名] + ''' ORDER BY [卡项] desc'

FROM

查询

GROUP BY

[店名]

这篇关于“SqlServer中怎么生成多维数据集,详细方法是什么”的文章就介绍到这了,更多相关的内容,小编将为大家输出更多高质量的实用文章!

(编辑:银川站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章