如A表
  
   code      shoping   monney  shijian
   1000       苹果        11      2013-01-01
   1000       梨子       12      2013-01-01
   1000       西瓜       13      2013-01-02
   1000       苹果       14      2013-01-01
   1000       梨子       15      2013-01-01
   1000       西瓜       16      2013-01-02
   1001       瓜子       15      2013-01-01
   1001       南瓜       16      2013-01-02
   1002       萝卜       16      2013-01-02显示成:
  code      shoping1   monney1  shijian1  shoping2   monney2  shijian2  shoping3   monney3  shijian3     shoping4   monney4  shijian4  shoping5  monney5  shijian5
shoping6   monney6  shijian6
 1000       苹果        11      2013-01-01    梨子       12      2013-01-01
 西瓜       13      2013-01-02  苹果       14      2013-01-01    梨子       15      2013-01-01   西瓜       16      2013-01-021001       瓜子       15      2013-01-01   南瓜       16      2013-01-021002       萝卜       16      2013-01-02也就是一个编号只有一行数据。

解决方案 »

  1.   

    SQL2005下利用XML进行项目的合并与拆分
      通常情况下我们对相同项目进分组求和,那是相当的简单啦,只要select.. group by加聚合函数就行了,可是对于串一类的项目进行合并时就不这么简单了,同样分解一个按指定分隔符分隔的串或分析指定位置的串,在2000下我们通常是创建一个函数,然后分组或提取就行了,现我们主要讨论在2005下利用xml来完成这个工作。
      1、先来一个简单点,如下的例子对aaa相同的项目合并。
    ------------------------------------------------------------------------
    -- Author:  HappyFlyStone  
    -- Date  :  2009-01-04 20:57:59
    -- Ver:     Microsoft SQL Server 2005 - 9.00.2047.00 (Intel X86) 
    --          Apr 14 2006 01:12:25 
    --          Copyright (c) 1988-2005 Microsoft Corporation
    --          Standard Edition on Windows NT 5.0 (Build 2195: Service Pack 4)
    --      
    ------------------------------------------------------------------------
    -- Test Data: tb
    IF OBJECT_ID('tb') IS NOT NULL 
        DROP TABLE tb
    Go
    CREATE TABLE tb(aaa INT,bbb INT)
    Go
    INSERT INTO tb
    SELECT 1,2 UNION ALL
    SELECT 1,3 UNION ALL
    SELECT 1,4 UNION ALL
    SELECT 2,2 UNION ALL
    SELECT 2,5 
    GO
    --查询1
    select 
        aaa, 
        [values]=stuff(replace(replace((select [bbb] 
                                        from tb 
                                        where aaa=t.aaa for xml AUTO),
                                        '"/><tb bbb="',','),
                                '"/>',''),1,9,'')
    from tb t
    group by aaa 
      

  2.   


    这个还是不能达到要求。 我想能不能这样 给每个code 下面的shoping编一个值 code      shoping   monney  shijian            值
      1000     苹果        11      2013-01-01        1
      1000      梨子       12      2013-01-01          2
      1000       西瓜       13      2013-01-02        3
      1000       苹果       14      2013-01-01        4
     1000       梨子       15      2013-01-01         5
     1000       西瓜       16      2013-01-02         6
     1001       瓜子       15      2013-01-01         1
     1001       南瓜       16      2013-01-02         2  
     1002       萝卜       16      2013-01-02         1
    这样会不会容易显示一点吧。  但是这个值怎么编好呢?
      

  3.   

    row_number() over(partition by code)
    即可,好像得2005或2008才行
      

  4.   

    少个order by ....row_number() over(partition by code order by code)
      

  5.   

    USE test
    GO
    /*
     如A表
      
       code      shoping   monney  shijian
       1000       苹果        11      2013-01-01
       1000       梨子       12      2013-01-01
       1000       西瓜       13      2013-01-02
       1000       苹果       14      2013-01-01
       1000       梨子       15      2013-01-01
       1000       西瓜       16      2013-01-02
       1001       瓜子       15      2013-01-01
       1001       南瓜       16      2013-01-02
       1002       萝卜       16      2013-01-02显示成:
      code      shoping1   monney1  shijian1  shoping2   monney2  shijian2  shoping3   monney3  shijian3     shoping4   monney4  shijian4  shoping5  monney5  shijian5
    shoping6   monney6  shijian6
     1000       苹果        11      2013-01-01    梨子       12      2013-01-01
     西瓜       13      2013-01-02  苹果       14      2013-01-01    梨子       15      2013-01-01   西瓜       16      2013-01-021001       瓜子       15      2013-01-01   南瓜       16      2013-01-021002       萝卜       16      2013-01-02也就是一个编号只有一行数据。
    */-->生成表Aif object_id('A') is not null 
    drop table A
    Go
    Create table A([code] nvarchar(4),[shoping] nvarchar(2),[monney] nvarchar(2),[shijian] datetime)Insert into A
    Select N'1000',N'苹果',N'11','2013-01-01' Union all
    Select N'1000',N'梨子',N'12','2013-01-01' Union all
    Select N'1000',N'西瓜',N'13','2013-01-02' Union all
    Select N'1000',N'苹果',N'14','2013-01-01' Union all
    Select N'1000',N'梨子',N'15','2013-01-01' Union all
    Select N'1000',N'西瓜',N'16','2013-01-02' Union all
    Select N'1001',N'瓜子',N'15','2013-01-01' Union all
    Select N'1001',N'南瓜',N'16','2013-01-02' Union all
    Select N'1002',N'萝卜',N'16','2013-01-02'
    DECLARE @sql NVARCHAR(MAX)SELECT 
    @sql=ISNULL(@sql+',','')
    +N'Max(Case when row='+row+N' then shoping End) As shoping'+row
    +N',Max(Case when row='+row+N' then monney End) As monney'+row
    +N',Max(Case when row='+row+N' then shijian End) As shijian'+row 
    FROM (
    SELECT 
    LTRIM(ROW_NUMBER()OVER(PARTITION BY code ORDER BY monney ASC)) AS row 
    FROM A
    ) AS t
    GROUP BY row
    Exec (N'Select code,'+@sql+N' from (SELECT
    ROW_NUMBER()OVER(PARTITION BY code ORDER BY monney ASC) AS row
    ,*
    FROM A) As t Group by code')

    /*
    code shoping1 monney1 shijian1                shoping2 monney2 shijian2                shoping3 monney3 shijian3                shoping4 monney4 shijian4                shoping5 monney5 shijian5                shoping6 monney6 shijian6
    ---- -------- ------- ----------------------- -------- ------- ----------------------- -------- ------- ----------------------- -------- ------- ----------------------- -------- ------- ----------------------- -------- ------- -----------------------
    1000 苹果     11    2013-01-01 00:00:00.000   梨子     12    2013-01-01 00:00:00.000   西瓜     13      2013-01-02 00:00:00.000 苹果     14      2013-01-01 00:00:00.000 梨子     15      2013-01-01 00:00:00.000 西瓜     16      2013-01-02 00:00:00.000
    1001 瓜子     15    2013-01-01 00:00:00.000   南瓜     16    2013-01-02 00:00:00.000   NULL     NULL    NULL                    NULL     NULL    NULL                    NULL     NULL    NULL                    NULL     NULL    NULL
    1002 萝卜     16    2013-01-02 00:00:00.000   NULL     NULL    NULL                    NULL     NULL    NULL                    NULL     NULL    NULL                    NULL     NULL    NULL                    NULL     NULL    NULL
    */