zoukankan      html  css  js  c++  java
  • 透视表处理方案研究

    IF EXISTS (
    SELECT *
    FROM sys.objects
    WHERE OBJECT_ID = OBJECT_ID(N'[dbo].[TB_Student]')
    AND TYPE IN (N'U')
    )
    DROP TABLE [dbo].[TB_Student]
    GO

    CREATE TABLE TB_Student
    (
    S_Name NVARCHAR(50),
    B_Name NVARCHAR(50),
    S_No INT
    )

    INSERT TB_Student
    (
    S_Name,
    B_Name,
    S_No
    )
    SELECT '小王',
    'Excel教材',
    10
    UNION ALL
    SELECT '小李',
    'Excel教材',
    15
    UNION ALL
    SELECT '小王',
    'Word教材',
    8
    UNION ALL
    SELECT '小李',
    'Excel教材',
    7
    UNION ALL
    SELECT '小王',
    'Excel教材',
    9
    UNION ALL
    SELECT '小李',
    'Excel教材',
    2
    UNION ALL
    SELECT '小王',
    'Word教材',
    3
    UNION ALL
    SELECT '小李',
    'Excel教材',
    5

    SELECT v.*,
    m.SUM
    FROM (
    SELECT S_NAME,
    ISNULL(Excel教材, 0) 'Excel教材',
    ISNULL(Word教材, 0) 'Word教材'
    FROM TB_Student
    PIVOT(SUM(S_No) FOR B_Name IN (Excel教材, Word教材)) AS
    pvt
    ) v
    INNER JOIN (
    SELECT S_NAME,
    SUM(S_No) [SUM]
    FROM TB_Student
    GROUP BY
    S_NAME
    ) m
    ON v.S_NAME = m.S_NAME

    DECLARE @sql NVARCHAR(1000)
    SET @sql = 'SELECT S_Name, '
    SELECT @sql = @sql + 'sum(case B_Name when ' + QUOTENAME(B_Name, '''') +
    ' then S_No else 0 end) as ' + QUOTENAME(B_Name) + ','
    FROM TB_Student
    GROUP BY B_Name

    SELECT @sql = LEFT(@sql, LEN(@sql) -1)
    SELECT @sql = @sql + ', sum(S_No) as [sum] from TB_Student group by [S_Name]'
    SELECT @sql
    EXEC (@sql)

  • 相关阅读:
    2018.7.9 模拟赛
    树状数组||归并排序求逆序对+离散化 nlogn
    LCS nlogn
    孤岛营救问题
    [POJ 3621] Sighting Cows
    树状数组求LIS
    nlogn求逆序对&&陌上花开
    最长可重区间集
    LCA模板
    [BZOJ] 4196 [Noi2015]软件包管理器
  • 原文地址:https://www.cnblogs.com/fery/p/1865769.html
Copyright © 2011-2022 走看看