SQL Server:如何组合行

时间:2015-12-01 16:58:27

标签: python sql-server pandas pymssql

我有一个像

这样的查询
select top 10 Col1,Col2,Col3 from tab1

给了我

(1, 1, 1)
(5, 2, 59)
(8, 3, 69)
(9, 4, 70)
(10, 5, 71)
(11, 6, 72)
(11, 7, 73)
(11, 8, 74)
(11, 9, 75)
(11, 10, 76)

我想将结果压缩为

    (1, 1, 1)
    (5, 2, 59)
    (8, 3, 69)
    (9, 4, 70)
    (10, 5, 71)
    (11, 6, 72,73,74,75,76)

我如何在选择查询中做到这一点?

修改

请注意,所有列都是int类型。在查询结果中,我不介意第三列是否转换为varchar

修改

最终,我将查询结果存储在数据帧中。用数据帧实现这个会更容易吗?

1 个答案:

答案 0 :(得分:2)

您可以使用以下技术执行此操作。请注意,我以可消费格式发布了ddl和示例数据。你应该在将来自己做这件事。

if OBJECT_ID('tempdb..#something') is not null
    drop table #something

create table #something
(
    Col1 int
    , Col2 int
    , Col3 int
)

insert #something
select * 
from (Values
(1, 1, 1),
(5, 2, 59),
(8, 3, 69),
(9, 4, 70),
(10, 5, 71),
(11, 6, 72),
(11, 7, 73),
(11, 8, 74),
(11, 9, 75),
(11, 10, 76))x(Col1, col2,col3)

select Col1
    , MIN(Col2) as Col2
    , Stuff((select ',' + cast(Col3 as varchar(4))
        from #something s2
        where s2.Col1 = s.Col1
        for xml path('')), 1,1 , '') as Col3
from #something s
group by Col1