组合在给定字段中具有相同值的SQL记录

时间:2013-05-03 10:34:20

标签: sql sql-server

例如,假设你有下表

CourseId                             | CourseTitle | EntryMonth | EntryYear |
ebdef239-abb7-4a82-9229-1ed37496da86 | Maths FT    | January    | 2013      |
57504a66-4882-4794-a8b9-af0ead38dc70 | Maths FT    | February   | 2013      |
f06c5e58-5563-4dfd-a8fc-2ce186c2106f | Maths FT    | February   | 2014      |
0c81dfe6-0b11-4cad-a27c-970dbdb2876c | Maths FT    | February   | 2015      |
ebdef239-abb7-4a82-9229-1ed37496da86 | English PT  | January    | 2013      |
57504a66-4882-4794-a8b9-af0ead38dc70 | English PT  | January    | 2014      |

是否可以编写一个按CourseTitle& amp; EntryMonth,但将EntryYear值组合成临时列(最好用逗号分隔)。所以它看起来像这样:

CourseId                             | CourseTitle | EntryMonth | NewEntryYear     |
ebdef239-abb7-4a82-9229-1ed37496da86 | Maths FT    | January    | 2013             |
57504a66-4882-4794-a8b9-af0ead38dc70 | Maths FT    | February   | 2013, 2014, 2015 |
ebdef239-abb7-4a82-9229-1ed37496da86 | English PT  | January    | 2013, 2014       |

非常感谢任何例子。感谢。

2 个答案:

答案 0 :(得分:4)

select  CourseTitle
,       EntryMonth
,       stuff((
        select  ', ' + cast(EntryYear as varchar)
        from    Table1 t2
        where   t1.CourseTitle = t2.CourseTitle
                and t1.EntryMonth = t2.EntryMonth
        for xml path('')
        ), 1, 2, '') as Years
from    Table1 t1
group by
        CourseTitle
,       EntryMonth

Example at SQL Fiddle.

答案 1 :(得分:0)

如果您使用的是oracle 10g或更高版本,则以下内容将起作用:

SELECT COURSEID, COURSETITLE, ENTRYMONTH, 
LISTAGG(ENTRYYEAR, ',') WITHIN GROUP (ORDER BY ENTRYYEAR) AS NEWENTRYYEAR
FROM YOUR_TABLE_NAME 
GROUP BY COURSEID, COURSETITLE, ENTRYMONTH

如果你没有使用Oracle 10g,那么这个查询将没有多大帮助,我很抱歉。