接上一贴http://topic.csdn.net/u/20101120/11/9cfc5489-7f94-4be9-89a2-acf781605139.html?seed=774071650&r=70050716#r_70050716已知2列记录FLOOR   NUMBER
1        11      ---有 11 个故障在 1 楼
2        27      ---有 27 个故障在 2 楼
3        9       ......
4        19      ......
5        6       以下这些记录同上表述
6        6
7        11
8        16
9        2
10       5
11       3
12       2
13       2
14       1
1        5
16       3
17       1
18       4
19       1
20       13
21       3
22       3
23       4
24       7
25       4
26       1
27       12
28       5
29       4
30       2
31       15
32       1
33       9
34       6
35       8
36       9
谢谢楼上的朋友,执行SQL语句可以得到如下结果,请高手指点
要求是这样显示打印结果(LZ用的是SQL2005版本)1F    2F    3F    4F    5F    6F    7F    8F    9F   10F
14     9    11    18    10    5     24    35    3     1
17    12    16    23    15    6                33     2
19    13    21    25    28    34                      4
26    30    22    29                                  7
32                                                    8
                                                     20
                                                     27
                                                     31

解决方案 »

  1.   


    create table tb([FLOOR] int,[NUMBER] int)
    insert tb
    select 1,11 union all
    select 2,27 union all
    select 3,9 union all
    select 4,19 union all
    select 5,6 union all
    select 6,6 union all
    select 7,11 union all
    select 8,16 union all
    select 9,2 union all
    select 10,5 union all
    select 11,3 union all
    select 12,2 union all
    select 13,2 union all
    select 14,1 union all
    select 15,5 union all
    select 16,3 union all
    select 17,1 union all
    select 18,4 union all
    select 19,1 union all
    select 20,13 union all
    select 21,3 union all
    select 22,3 union all
    select 23,4 union all
    select 24,7 union all
    select 25,4 union all
    select 26,1 union all
    select 27,12 union all
    select 28,5 union all
    select 29,4 union all
    select 30,2 union all
    select 31,15 union all
    select 32,1 union all
    select 33,9 union all
    select 34,6 union all
    select 35,8 union all
    select 36,9
    goselect * 
    from (
    select id = row_number() over(partition by number order by floor),* 
    from (
    select number = ltrim(case when number >= 10 then 10 else number end)+'F',floor from tb
    ) a
    ) a
    pivot (max(floor) for a.number in ([1F],[2F],[3F],[4F],[5F],[6F],[7F],[8F],[9F],[10F])) b/*
    id                   1F          2F          3F          4F          5F          6F          7F          8F          9F          10F
    -------------------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
    1                    14          9           11          18          10          5           24          35          3           1
    2                    17          12          16          23          15          6           NULL        NULL        33          2
    3                    19          13          21          25          28          34          NULL        NULL        36          4
    4                    26          30          22          29          NULL        NULL        NULL        NULL        NULL        7
    5                    32          NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL        8
    6                    NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL        20
    7                    NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL        27
    8                    NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL        31(8 行受影响)
    */PS:你们老板最近没有表扬你么
      

  2.   


    --借楼上数据一用DROP TABLE tb
    create table tb([FLOOR] INT,[NUMBER] INT)
    insert tb
    select 1,11 union all
    select 2,27 union all
    select 3,9 union all
    select 4,19 union all
    select 5,6 union all
    select 6,6 union all
    select 7,11 union all
    select 8,16 union all
    select 9,2 union all
    select 10,5 union all
    select 11,3 union all
    select 12,2 union all
    select 13,2 union all
    select 14,1 union all
    select 15,5 union all
    select 16,3 union all
    select 17,1 union all
    select 18,4 union all
    select 19,1 union all
    select 20,13 union all
    select 21,3 union all
    select 22,3 union all
    select 23,4 union all
    select 24,7 union all
    select 25,4 union all
    select 26,1 union all
    select 27,12 union all
    select 28,5 union all
    select 29,4 union all
    select 30,2 union all
    select 31,15 union all
    select 32,1 union all
    select 33,9 union all
    select 34,6 union all
    select 35,8 union all
    select 36,9
    go
    DECLARE @s varchar(8000),@s1 varchar(8000)
    SELECT @s=''
    SELECT @s=@s+' UNION ALL SELECT [Floor],'+CASE WHEN Number<10 THEN LTRIM(Number) WHEN Number>=10 THEN LTRIM(10) END +'as Number FROM TB WHERE Number='+LTRIM(Number) FROM tb ORDER BY Number
    SET @s=STUFF(@S,1,10,'')
    EXEC ('SELECT DISTINCT * INTO ## FROM ('+@S+')A')
    SELECT @s1=ISNULL(@s1,'')+',MAX(CASE WHEN Number='''+LTRIM(Number)+''' THEN [Floor] ELSE Null END)as ''['+Ltrim(number)+'F]'' '
    FROM ## GROUP BY Number
    SET @s1='SELECT '+right(@s1,len(@s1))+' FROM ## GROUP BY Floor'
    EXEC( @s1)DROP TABLE ##/*[1F]        [2F]        [3F]        [4F]        [5F]        [6F]        [7F]        [8F]        [9F]        [10F]       
    ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- 
    NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL        1
    NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL        2
    NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL        3           NULL
    NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL        4
    NULL        NULL        NULL        NULL        NULL        5           NULL        NULL        NULL        NULL
    NULL        NULL        NULL        NULL        NULL        6           NULL        NULL        NULL        NULL
    NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL        7
    NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL        8
    NULL        9           NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL
    NULL        NULL        NULL        NULL        10          NULL        NULL        NULL        NULL        NULL
    NULL        NULL        11          NULL        NULL        NULL        NULL        NULL        NULL        NULL
    NULL        12          NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL
    NULL        13          NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL
    14          NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL
    NULL        NULL        NULL        NULL        15          NULL        NULL        NULL        NULL        NULL
    NULL        NULL        16          NULL        NULL        NULL        NULL        NULL        NULL        NULL
    17          NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL
    NULL        NULL        NULL        18          NULL        NULL        NULL        NULL        NULL        NULL
    19          NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL
    NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL        20
    NULL        NULL        21          NULL        NULL        NULL        NULL        NULL        NULL        NULL
    NULL        NULL        22          NULL        NULL        NULL        NULL        NULL        NULL        NULL
    NULL        NULL        NULL        23          NULL        NULL        NULL        NULL        NULL        NULL
    NULL        NULL        NULL        NULL        NULL        NULL        24          NULL        NULL        NULL
    NULL        NULL        NULL        25          NULL        NULL        NULL        NULL        NULL        NULL
    26          NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL
    NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL        27
    NULL        NULL        NULL        NULL        28          NULL        NULL        NULL        NULL        NULL
    NULL        NULL        NULL        29          NULL        NULL        NULL        NULL        NULL        NULL
    NULL        30          NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL
    NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL        31
    32          NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL
    NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL        33          NULL
    NULL        NULL        NULL        NULL        NULL        34          NULL        NULL        NULL        NULL
    NULL        NULL        NULL        NULL        NULL        NULL        NULL        35          NULL        NULL
    NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL        36          NULL警告: 聚合或其它 SET 操作消除了空值。
    */