SQL中的循环行

时间:2014-11-06 23:12:33

标签: sql sql-server

我正在寻找输出:

[最近]日期:评论,[第二个最近]日期:评论,......

示例:

Book    Comments
BookA   27/03/13: comment1, 21/03/13: comment2, 21/03/13: uhuuuu [and so on]
BookB   21/03/13: comment2a, 18/03/13: xxx comments

SQL Fiddle

MS SQL Server 2012架构设置

CREATE TABLE books 
    (
     book varchar(10), 
     comments varchar(20),
     datewww datetime

    );

INSERT INTO books
(book, comments, datewww)
VALUES
('BookA', 'comment1', '2013-03-27 10:30:00.000'),
('BookA', 'comment2', '2013-03-21 09:31:00.000'),
('BookA', 'comentx', '2013-03-10 08:31:00.000'),
('BookA', 'Text test', '2013-02-15 07:41:00.000'),
('BookA', 'uhuuuu', '2013-03-21 07:31:00.000'),
('BookB', 'comment2a', '2013-03-21 09:31:00.000'),
('BookB', 'xxx comments', '2013-03-18 09:31:00.000');

查询1

SELECT
  book,
  CONVERT(VARCHAR, datewww, 3) + ': ' + comments + ', '
FROM books

Results

|  BOOK |                 COLUMN_1 |
|-------|--------------------------|
| BookA |     27/03/13: comment1,  |
| BookA |     21/03/13: comment2,  |
| BookA |      10/03/13: comentx,  |
| BookA |    15/02/13: Text test,  |
| BookA |       21/03/13: uhuuuu,  |
| BookB |    21/03/13: comment2a,  |
| BookB | 18/03/13: xxx comments,  |

1 个答案:

答案 0 :(得分:3)

SQL Fiddle

SELECT book,
       Stuff((SELECT ', ' + ltrim(rtrim(CONVERT(VARCHAR, datewww, 3) + ': ' + comments))
              FROM   books t2 
              WHERE  t2.book = t1.book
              order by datewww desc
               FOR XML PATH(''), TYPE
                   ).value('.','varchar(max)')
                   ,1,2, '') [comments] 
FROM   books t1 
GROUP  BY book 

<强> Results

|  BOOK |                                                                                          comments |
|-------|--------------------------------------------------------------------------------------------------|
| BookA | 27/03/13: comment1, 21/03/13: comment2, 21/03/13: uhuuuu, 10/03/13: comentx, 15/02/13: Text test |
| BookB | 21/03/13: comment2a, 18/03/13: xxx comments |