SQLserver中cube:多维数据集实例详解

这篇文章主要介绍了SQLserver中cube:多维数据集实例详解,具有一定参考价值,需要的朋友可以了解下。

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

根据需要使用union all 拼接

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

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

举例:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

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、将某一列的数据作为列名,动态加载,使用存储过程,拼接字符串

?

1

2

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、根据某一列分组,分别建表

?

1

2

3

4

5

6

SELECT

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

FROM

查询

GROUP BY

[店名]

总结

以上就是本文关于SQLserver中cube:多维数据集实例详解的全部内容,希望对大家有所帮助。有什么问题可以随时留言,小编会及时回复大家的。感谢各位对本站的支持!

原文链接:http://www.cnblogs.com/liujianshe1990-/p/7249406.html

版权声明:本文(即:原文链接:https://www.qin1qin.com/catagory/25001/)内容由互联网用户自发投稿贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 630367839@qq.com 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022年9月23日 下午12:19
下一篇 2022年9月23日 下午12:19
软件定制开发公司

相关阅读

发表回复

登录后才能评论
通知:禁止投稿所有关于虚拟货币,币圈类相关文章,发现立即永久封锁账户ID!