将列值(行)转换为列并汇总两个不同表的两行上的计数

高超

我有两张桌子

  1. 程序
  2. 学生

学生

Name    Status1   Syear SCode
--------------------
kk       A       2000 1
ra       A       2001  2
Paras    L       2000  2
Prit     L       2001  2
Poot     A       2002  4

程序

PName       PCode
--------------------
Msc          1
DC           2
PO           4

加入ID

所需输出:

SELECT * 
FROM 
     (SELECT  
         Program.PName AS v, Status1
      FROM 
         Student, Program  
      WHERE 
         Student.PCode = SCode
      GROUP BY  
         Program.PName, Student.Syear, Status1) AS src
pivot
(
  count(v)
  FOR Status1 IN ([A],)
) as piv

它不显示PNAME在输出中

          A  L
        -----------
          1  0
          1  2
          1  0

所需的输出

    PNAME  A  L
    -----------
    Msc   1  0
    DC    1  2
    PO    1  0
萨拉斯(KS)

1.静态PIVOT

如果事先知道列名,则可以执行此操作

SELECT PName,ISNULL([A],0) [A],ISNULL([L],0)[L] FROM 
 (
    -- Source data for pivoting
    SELECT P.PName,Status1,
    COUNT(Status1)OVER(PARTITION BY PNAME,Status1)CNT
    FROM #PROGRAM P
    JOIN #Student S ON P.PCODE=S.SCODE
 ) x
 PIVOT 
 (
     --Defines the values in each dynamic columns
     MIN(CNT)
     -- Get the names of columns to pivot
     FOR Status1 IN ([A],[L])
) p            
ORDER BY PName

2.动态皮沃特

如果事先不知道列数,则可以进行动态数据透视。

首先动态获取列以进行旋转

DECLARE @cols NVARCHAR (MAX)

SELECT @cols = COALESCE (@cols + ',[' + Status1 + ']', '[' + Status1 + ']')
               FROM    (SELECT DISTINCT Status1 FROM #Student) PV 
               ORDER BY Status1

现在,下面的变量用于替换NULL零。

 DECLARE @NulltoZeroCols NVARCHAR (MAX)

SELECT @NullToZeroCols = SUBSTRING((SELECT ',ISNULL(['+Status1+'],0) AS ['+Status1+']' 
FROM (SELECT DISTINCT Status1 FROM #Student)TAB  
ORDER BY Status1 FOR XML PATH('')),2,8000) 

现在旋转它。我已经在里面写了逻辑

DECLARE @query NVARCHAR(MAX)
SET @query = '-- This outer query forms your pivoted result
             SELECT PName,'+@NullToZeroCols+' FROM 
             (
                -- Source data for pivoting
                SELECT P.PName,Status1,
                COUNT(Status1)OVER(PARTITION BY PNAME,Status1)CNT
                FROM #PROGRAM P
                JOIN #Student S ON P.PCODE=S.SCODE
             ) x
             PIVOT 
             (
                 --Defines the values in each dynamic columns
                 MIN(CNT)
                 -- Get the names from the @cols variable to show as column
                 FOR Status1 IN (' + @cols + ')
            ) p            
            ORDER BY PName;' 

EXEC SP_EXECUTESQL @query

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从两个或多个表转换为汇总功能的行与列?

来自分类Dev

将行的每两个字段转换为包含两行的列

来自分类Dev

将两行转换为两列

来自分类Dev

将具有不同数据的两行分成两个不同的列

来自分类Dev

如何汇总来自两个不同表的两行?

来自分类Dev

如何将具有两个或多个表的聚合函数的行转换为列?

来自分类Dev

使用 Pivot 将两个表的行转换为 SQL Server 中的列

来自分类Dev

将只有 2 个不同列值的两行合并为一个

来自分类Dev

一个表中有两个具有相同ID的元组,并且这两行的其他一些列的值不同

来自分类Dev

熊猫-汇总两个值之间的两行之间的值

来自分类Dev

如何将两行分钟的时间不同值转换为小时

来自分类Dev

SQL SELECT仅包含来自两个不同表的列的MAX值的行

来自分类Dev

如何将两个DataFrame列转换为汇总系列?

来自分类Dev

使用mysql在两个不同的行中交换“两个”列值

来自分类Dev

根据两个不同的ID连接两行

来自分类Dev

SQL-按列将两行分组,在不同的列上值分别为null

来自分类Dev

对两行的值求和,但将某些列分开

来自分类Dev

计算来自两个不同表的两行之间的差异

来自分类Dev

识别并比较两个不同表中的两行

来自分类Dev

在键列值相同的任何时候切换两行中的两个值

来自分类Dev

更改表将两行具有相同值的列合并

来自分类Dev

按日期将两列DataFrame转换为值计数

来自分类Dev

将flex列分为两行

来自分类Dev

将两个不同表中的两列相乘后找到最大值-SQL

来自分类Dev

从行转换为两列

来自分类Dev

如何合并两行并汇总UPDATE中的某些列?

来自分类Dev

MySQL如何将两个JOINed表的SUM()列转换为新列?

来自分类Dev

如何将模式分为两个两列但行不同

来自分类Dev

两个如何比较来自两个不同数据框的熊猫的两行

Related 相关文章

  1. 1

    如何从两个或多个表转换为汇总功能的行与列?

  2. 2

    将行的每两个字段转换为包含两行的列

  3. 3

    将两行转换为两列

  4. 4

    将具有不同数据的两行分成两个不同的列

  5. 5

    如何汇总来自两个不同表的两行?

  6. 6

    如何将具有两个或多个表的聚合函数的行转换为列?

  7. 7

    使用 Pivot 将两个表的行转换为 SQL Server 中的列

  8. 8

    将只有 2 个不同列值的两行合并为一个

  9. 9

    一个表中有两个具有相同ID的元组,并且这两行的其他一些列的值不同

  10. 10

    熊猫-汇总两个值之间的两行之间的值

  11. 11

    如何将两行分钟的时间不同值转换为小时

  12. 12

    SQL SELECT仅包含来自两个不同表的列的MAX值的行

  13. 13

    如何将两个DataFrame列转换为汇总系列?

  14. 14

    使用mysql在两个不同的行中交换“两个”列值

  15. 15

    根据两个不同的ID连接两行

  16. 16

    SQL-按列将两行分组,在不同的列上值分别为null

  17. 17

    对两行的值求和,但将某些列分开

  18. 18

    计算来自两个不同表的两行之间的差异

  19. 19

    识别并比较两个不同表中的两行

  20. 20

    在键列值相同的任何时候切换两行中的两个值

  21. 21

    更改表将两行具有相同值的列合并

  22. 22

    按日期将两列DataFrame转换为值计数

  23. 23

    将flex列分为两行

  24. 24

    将两个不同表中的两列相乘后找到最大值-SQL

  25. 25

    从行转换为两列

  26. 26

    如何合并两行并汇总UPDATE中的某些列?

  27. 27

    MySQL如何将两个JOINed表的SUM()列转换为新列?

  28. 28

    如何将模式分为两个两列但行不同

  29. 29

    两个如何比较来自两个不同数据框的熊猫的两行

热门标签

归档