加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SqlServer中怎么生成多维数据集,详细方法指什么

发布时间:2023-04-20 14:20:42 所属栏目: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
 
[店名]
 
 

(编辑:聊城站长网)

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

    推荐文章