none
sql和并列的问题 RRS feed

  • 问题

  • 把数据库中每十条记录中某一列的数据合并在一起并用逗号隔开,然后更新到数据库中的这十条记录的中的任何一条记录中,并删除其它的记录,应该如何处理。
    2009年10月10日 3:21

答案

  • -- 示例

    --dbo.tb 是要处理的表

    --name   是每条记录相加, 逗号分隔的列值

    --memo   是存储相加结果的列(也可以设置为name )

     

    -- 合并记录

    DECLARE

        @column_sumary nvarchar(4000),

        @row_count int

    ;

     

    SET @row_count = 0;

    UPDATE dbo.tb SET

        @column_sumary = CASE

                         WHEN @row_count = 0 THEN name

                         ELSE @column_sumary + N',' + name

                      END,

        @row_count = CASE

                      WHEN @row_count = 9 THEN 0

                      ELSE @row_count + 1

                  END,

                 

        memo = CASE

                  WHEN @row_count = 0 THEN @column_sumary

                  ELSE NULL

               END

    FROM dbo.tb

    ;

     

    -- 删除不存储合并值的记录

    DELETE FROM dbo.tb

    WHERE memo IS NULL

    ;

     

    2009年10月10日 4:02

全部回复

  • Not sure why you want to do that.

    2009年10月10日 3:22
  • 写个程序吧或者存储过程来做一下,不难的
    2009年10月10日 3:33
  • 存储过程如何处理????我要处理的数据量比较大,写程序的话不太现实。

    2009年10月10日 3:35
  • 存储过程如何处理????我要处理的数据量比较大,写程序的话不太现实。

    2009年10月10日 3:37
  • You have to do it with some code, since you can't take rows out with your hand.
    2009年10月10日 3:46
  • -- 示例

    --dbo.tb 是要处理的表

    --name   是每条记录相加, 逗号分隔的列值

    --memo   是存储相加结果的列(也可以设置为name )

     

    -- 合并记录

    DECLARE

        @column_sumary nvarchar(4000),

        @row_count int

    ;

     

    SET @row_count = 0;

    UPDATE dbo.tb SET

        @column_sumary = CASE

                         WHEN @row_count = 0 THEN name

                         ELSE @column_sumary + N',' + name

                      END,

        @row_count = CASE

                      WHEN @row_count = 9 THEN 0

                      ELSE @row_count + 1

                  END,

                 

        memo = CASE

                  WHEN @row_count = 0 THEN @column_sumary

                  ELSE NULL

               END

    FROM dbo.tb

    ;

     

    -- 删除不存储合并值的记录

    DELETE FROM dbo.tb

    WHERE memo IS NULL

    ;

     

    2009年10月10日 4:02