有A表,表结构如下
id:自增字段
rq:插入日期
pn:物品名称 (总共50种左右)
je:销售金额id   rq                         pn              je
1    2015-06-01       物品1          10
2    2015-06-01       物品2           20
3    2015-06-01       物品3           15
4    2015-06-02       物品4           30
5    2015-06-02       物品1           10
........
想要这样的查询结果:
rq                         物品1       物品2    物品3     物品4
2015-06-01       10             20          15
2015-06-02       10                                           30由于物品名称是动态生成的,不知道怎么生成动态列

解决方案 »

  1.   

    http://blog.csdn.net/vipxiaotian/article/details/4409423 这里有详细论述动态行转列 以及案例。
      

  2.   

    行列转换
    很相似的,差别就是你在拼 @columns 的时候要对 pn 先进行 DISTINCT。
      

  3.   

    CREATE TABLE tb 
    (
    id INT,
    rq VARCHAR(50),
    pn VARCHAR(50),
    je VARCHAR(50)
    )
    INSERT INTO tb
    (
    id,
    rq,
    pn,
    je
    )
    VALUES
    (1,'2015-06-01','物品1','10'),(2,'2015-06-01','物品2','20'),
    (3,'2015-06-01','物品3','15'),(4,'2015-06-02','物品4','30'),
    (5,'2015-06-02','物品1','10')
    goDECLARE @SQL VARCHAR(5000)
    SET @SQL='SELECT RQ'
    SELECT @SQL=@SQL+
    ','+'
    SUM(CASE WHEN PN='+QUOTENAME(PN,'''')+ ' THEN CONVERT(INT,JE) END) AS ' +QUOTENAME(PN,'''')+'

    FROM tb
    GROUP BY PN
    --PRINT (@SQL)
    SET @SQL=@SQL+' FROM TB GROUP BY RQ'
    EXEC (@SQL) RQ                                                 物品1         物品2         物品3         物品4
    -------------------------------------------------- ----------- ----------- ----------- -----------
    2015-06-01                                         10          20          15          NULL
    2015-06-02                                         10          NULL        NULL        30
    Warning: Null value is eliminated by an aggregate or other SET operation.(2 row(s) affected)