sqlserver——cube:多维数据集
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——cube:多维数据集的更多相关文章
- BI之SSAS完整实战教程2 -- 开发环境介绍及多维数据集数据源准备
上一篇我们已经完成所有的准备工作,现在我们就开始动手,通过接下来的三篇文章创建第一个多维数据集. 传统的维度和多维数据集设计方法主要是基于现有的单源数据集. 在现实世界中,当开发商业智能应用程序时,很 ...
- 《BI项目笔记》创建多维数据集Cube(1)
有两个事实表,因此就有两个度量值组,并且向导将为非维度键的事实表中的每一个数值列创建一个度量值.由于我们这里不需要那么多,所以只选择部分度量值.另外要注意,度量值的名称源于事实表中的列,所有名称由可能 ...
- BI之SSAS完整实战教程5 -- 详解多维数据集结构
之前简单介绍过多维数据集(Cube)的结构. 原来计划将Cube结构这部分内容打散,在实验中穿插讲解, 考虑到结构之间不同的部分都有联系,如果打散了将反而不好理解,还是直接一次性全部讲完. 本篇我们将 ...
- BI之SSAS完整实战教程3 -- 创建第一个多维数据集
上一篇我们已经完成了数据源的准备工作,现在我们就开始动手,创建第一个多维数据集(Cube). 文章提纲 使用多维数据集向导创建多维数据集 总结Cube设计器简介 维度细化 总结 一.使用向导创建多维数 ...
- 8第八章CTE递归及分组汇总高级部分(多维数据集)(转载)
8第八章CTE递归及分组汇总高级部分(多维数据集) 这里贴图太麻烦...算了 UNION 等集合操作符: UNION 等以第一个 SELECT 的 列明 作为 整个结果集的列明,整个结果集 唯一认可 ...
- SSAS系列——【03】多维数据(多维数据集对象)
原文:SSAS系列--[03]多维数据(多维数据集对象) 1.什么是Cube? 简单 Cube 对象由基本信息.维度和度量值组组成. 基本信息包括多维数据集的名称.多维数据集的默认度量值.数据源和存储 ...
- 创建和使用SQL Server SSAS本地多维数据集
Microsoft SQL Server SSAS的本地多维数据集(即Local Cube,也叫脱机多维数据集)和本地挖掘模型(Local Mining Models)允许在客户端机器上脱机执行离线分 ...
- 微软BI 之SSAS 系列 - 多维数据集维度用法之三 多对多维度 Many to Many
开篇介绍 对于维度成员和事实数据直接的关系看到更多的可能还是一对一,一对多的关系.比方在事实维度(或退化维度)中一个订单和明细号组合而成的ID,对应的就是事实表中的一条数据,这就是一对一的关系.比方说 ...
- 微软BI 之SSAS 系列 - 多维数据集维度用法之一 引用维度 Referenced Dimension
在 CUBE 设计过程中有一个非常重要的点就是定义维度与度量值组关系,维度的创建一般在前,而度量值组一般来源于一个事实表.当维度和度量值组在 CUBE 中定义完成之后,下一个最重要的动作就是定义两者之 ...
随机推荐
- 使用Eclipse创建SpringBoot项目
1 首先我们需要安装STS插件:Help--> Eclipse Marketplace 安装成功之后,会让你重启eclipse. 2 然后 File-->New--->Proje ...
- eclipse中使用pull报错(git提交冲突)
1.工程->Team->pull:报错 解决方案: 2.工程->Team->Syschronize Workspace: 3.在左侧会将有冲突的代码列举出来:(可选操作:在其上 ...
- [转]Node.js中koa使用redis数据库
本文转自:https://blog.csdn.net/offbye/article/details/52452322 Redis是一个常用的Nosql数据库,一般用来代替Memcached做缓存服务, ...
- 【转载】ASP.NET工具类:文件夹目录Directory操作工具类
在ASP.NET开发网站的过程中,有时候会涉及到文件夹相关操作,如判断文件夹目录是否存在.删除文件夹目录.创建文件.删除文件.复制文件夹等等.这一批有关文件目录的操作可以通过Directory类.Fi ...
- Thread类(线程)
操作系统通过线程对程序的执行进行管理,当操作系统运行一个程序的时候,首先,操作系统将为这个准备运行的程序分配一个进程,以管理这个程序所需要的各种资源.在这些资源之中,会包含一个称为主线程的线程数据结构 ...
- sql server 查询时会锁表吗?
sql server在执行查询语句时会锁表.在锁表期间禁止增删改操作. 如果不想锁表,那就再表名或别名后面加上WITH(NOLOCK) 如下所示:
- cmd Telnet 手工模拟http请求
telnet Windows系统自带的访问页面命令 首先打开控制面板点击卸载程序 打开windows功能 勾选 telnt 客户端 在打开cmd 命令 输入 telnt www.baidu.com 8 ...
- innodb mvcc实现机制
多版本并发控制 大部分的MySQL的存储 引擎,比如InnoDB,Falcon,以及PBXT并不是简简单单的使用行锁机制.它们都使用了行锁结合一种提高并发的技术,被称为MVCC(多版本并 发控制).M ...
- Java线程池 Executor框架概述
线程池的意义 循环利用线程资源,避免重复创建和销毁线程 线程池的任务是异步执行的,只要提交完成就能快速返回,可以提高应用响应性 Java线程池还有一个很重要的意义:Java线程池就是JDK 5 推出的 ...
- SQL多表联合查询(交叉连接,内连接,外连接)
连接查询: 交叉连接: 交叉连接返回的结果是被连接的两个表中所有数据行的笛卡尔积,也就是返回第一个表中符合查询条件的数据航数乘以第二个表中符合,查询条件的数据行数,例如department ...