• 解决一条特殊的分类统计问题(SQL)


    原问题如下:
    /*
    table1:
    序号   类别
    01     玩具
    02     食物
    table2:
    序号   类别    名称    对应编号
    01     玩具    大小      A1
    02     玩具    面积      A2
    03     玩具    体积      A3
    04     食物    重量      A7
    05     食物    颜色      A9
    table3:
    序号   物品   A1    A2    A3   A4   A5   A6    A7   A8   A9   A10 ..
    01     皮球   10    20    30
    02     篮球   20    30    40
    03     苹果                                    20        50
    04     香蕉                                    80        70

    显示效果
    对应2种类别
    当是玩具类别时候显示
    物品   类别   大小   面积   体积
    皮球   玩具   10      20     30
    篮球   玩具   20      30     40
    当是食物类别时候显示
    物品   类别   重量   颜色
    苹果   食物   20      50
    香蕉   食物   80      70

    请给出具体的查询过程。。谢谢

    */

    自感觉不错的一个解决方法:
    create table A(序号 nvarchar(10),类别 nvarchar(10))
    insert A select  '01',     '玩具'
    union all select '02',     '食物'

    create table B(序号 nvarchar(10), 类别 nvarchar(10), 名称 nvarchar(10), 对应编号 nvarchar(10))
    insert B select '01',     '玩具',    '大小',      'A1'
    union all select '02',     '玩具',    '面积',      'A2'
    union all select '03',     '玩具',    '体积',      'A3'
    union all select '04',     '食物',    '重量',      'A7'
    union all select '05',     '食物',    '颜色',      'A9'
    create table C(序号 nvarchar(10), 物品 nvarchar(10), A1 int, A2 int, A3 int, A4 int, A5 int, A6 int, A7 int, A8 int, A9 int, A10 int)
    insert C(序号, 物品, A1, A2, A3) values('01','皮球',10,20,30)
    insert C(序号, 物品, A1, A2, A3) values('02','篮球',20,30,40)
    insert C(序号, 物品, A7, A9) values('03','苹果',20,50)
    insert C(序号, 物品, A7, A9) values('04','香蕉',80,70)


    DECLARE @Input nvarchar(10--要统计的类别,可以根据实际需要输入
    DECLARE @EXECUTE_SQL nvarchar(4000)
    DECLARE @EXECUTE_WHERE nvarchar(4000)

    SELECT @Input='食物',@EXECUTE_SQL='SELECT [物品],'''+@Input +''' AS [类别]',@EXECUTE_WHERE=' WHERE 1=1'

    SELECT @EXECUTE_SQL=@EXECUTE_SQL+',SUM('+[对应编号]+') AS ['+[名称]+']'
            ,
    @EXECUTE_WHERE=@EXECUTE_WHERE+' AND '+[对应编号]+' IS NOT NULL' 
        
    FROM B WHERE B.[类别]=@Input
    SET  @EXECUTE_SQL=@EXECUTE_SQL+' FROM C '+@EXECUTE_WHERE+' GROUP BY [物品] '
    EXECUTE(  @EXECUTE_SQL)
    DROP TABLE A,B,C
    /*
    物品   类别   大小   面积   体积
    皮球   玩具   10      20     30
    篮球   玩具   20      30     40

    当是食物类别时候显示
    物品   类别   重量   颜色
    苹果   食物   20      50
    香蕉   食物   80      70
    */
    不是很难,要说难点就是怎么样构造SQL语句而已。
    原帖:http://community.csdn.net/Expert/topic/5535/5535330.xml?temp=.8875543
  • 相关阅读:
    R语言 实验三 数据探索和预处理
    Java学习——包及可见性
    Java学习——包及可见性
    Java学习——使用Static修饰符
    Java学习——使用Static修饰符
    CSDN也有我的博客啦
    将博客搬至CSDN
    Java学习——方法中传递参数分简单类型与复杂类型(引用类型)编程计算100+98+96+。。。+4+2+1的值,用递归方法实现
    Java学习——方法中传递参数分简单类型与复杂类型(引用类型)编程计算100+98+96+。。。+4+2+1的值,用递归方法实现...
    Java学习——方法中传递参数分简单类型与复杂类型(引用类型)
  • 原文地址:https://www.cnblogs.com/wghao/p/748964.html
Copyright © 2020-2023  润新知