SQLserver中cube:多维数据集实例详解
1、cube:生成多维数据集,包含各维度可能组合的交叉表格,使用with关键字连接withcube
根据需要使用unionall拼接
判断某一列的null值来自源数据还是cube使用GROUPING关键字
GROUPING([档案号])=1:null值来自cube(代表所有的档案号)
GROUPING([档案号])=0:null值来自源数据
举例:
SELECT*INTO##GET FROM (SELECT* FROM(SELECT CASE WHEN(GROUPING([档案号])=1)THEN '合计' ELSE[档案号] ENDAS'档案号', CASE WHEN(GROUPING([系列])=1)THEN '合计' ELSE[系列] ENDAS'系列', CASE WHEN(GROUPING([店长])=1)THEN '合计' ELSE[店长] ENDAS'店长',SUM(剩余次数)AS'总剩余', CASE WHEN(GROUPING([店名])=1)THEN '合计' ELSE[店名] ENDAS'店名' FROM##PudianCard GROUPBY[档案号],[店名],[店长],[系列] WITHcube HAVINGGROUPING([店名])!=1 ANDGROUPING([档案号])=1--ANDGROUPING([系列])=1)ASM UNION ALL (SELECT* FROM(SELECT CASE WHEN(GROUPING([档案号])=1)THEN '合计' ELSE[档案号] ENDAS'档案号', CASE WHEN(GROUPING([系列])=1)THEN '合计' ELSE[系列] ENDAS'系列', CASE WHEN(GROUPING([店长])=1)THEN '合计' ELSE[店长] ENDAS'店长',SUM(剩余次数)AS'总剩余', CASE WHEN(GROUPING([店名])=1)THEN '合计' ELSE[店名] ENDAS'店名' FROM##PudianCard GROUPBY[档案号],[店名],[店长],[系列] WITHcube HAVINGGROUPING([店名])!=1 ANDGROUPING([店长])!=1)ASP) UNION ALL (SELECT* FROM(SELECT CASE WHEN(GROUPING([档案号])=1)THEN '合计' ELSE[档案号] ENDAS'档案号', CASE WHEN(GROUPING([系列])=1)THEN '合计' ELSE[系列] ENDAS'系列', CASE WHEN(GROUPING([店长])=1)THEN '合计' ELSE[店长] ENDAS'店长',SUM(剩余次数)AS'总剩余', CASE WHEN(GROUPING([店名])=1)THEN '合计' ELSE[店名] ENDAS'店名' FROM##PudianCard GROUPBY[档案号],[店名],[店长],[系列] WITHcube HAVINGGROUPING([店名])!=1 ANDGROUPING([店长])!=1)ASW) UNION ALL (SELECT* FROM(SELECT CASE WHEN(GROUPING([档案号])=1)THEN '合计' ELSE[档案号] ENDAS'档案号', CASE WHEN(GROUPING([系列])=1)THEN '合计' ELSE[系列] ENDAS'系列', CASE WHEN(GROUPING([店长])=1)THEN '合计' ELSE[店长] ENDAS'店长',SUM(剩余次数)AS'总剩余', CASE WHEN(GROUPING([店名])=1)THEN '合计' ELSE[店名] ENDAS'店名' FROM##PudianCard GROUPBY[档案号],[店名],[店长],[系列] WITHcube HAVINGGROUPING([店名])=1 ANDGROUPING([店长])=1 ANDGROUPING([档案号])=1)ASK))AST
2、rollup:功能跟cube相似
3、将某一列的数据作为列名,动态加载,使用存储过程,拼接字符串
DECLARE@stnvarchar(MAX)='';SELECT@st=@st+'max(casewhen[系列]='''+CAST([系列]ASVARCHAR)+'''then[总剩余]elsenullend)as['+CAST([系列]ASVARCHAR)+'],' FROM##GET GROUPBY[系列];print@st;
4、根据某一列分组,分别建表
SELECT 'selectROW_NUMBER()over(orderby[卡项]desc)as[序号],[会员],[档案号],[卡项],[剩余次数],[员工],[店名]into'+ltrim([店名])+'from查询where[店名]='''+[店名]+'''ORDERBY[卡项]desc' FROM 查询 GROUPBY [店名]
总结
以上就是本文关于SQLserver中cube:多维数据集实例详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅:MYSQL子查询和嵌套查询优化实例解析、几个比较重要的MySQL变量、ORACLESQL语句优化技术要点解析等,有什么问题可以随时留言,小编会及时回复大家的。感谢各位对本站的支持!