2015-12-01 5 views
-1

У меня есть запрос, какSQL Server: Как для объединения строк

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) 

как я могу сделать что в самом выборе запроса?

EDIT

обратите внимание, что все столбцы имеют целого типа. в результате запроса, я не возражал бы, если третий столбец был отлит в VARCHAR

Редактировать

В конце концов, я храню результаты запроса в dataframe. было бы легче достичь этого с использованием данных?

+0

Я не думаю, что это возможно в одном запросе на выбор, поскольку запрос выбора имеет определенный набор возвращенных столбцов для всех строк. –

+0

, так мне нужно создать временную таблицу? было бы проще сделать это в кадре данных python? – AbtPst

+0

@ RenéVogt это можно сделать в одном запросе с использованием технологии XML PATH. –

ответ

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 
+0

отличная! но почему varchar (4)? – AbtPst

+0

. Varchar должен быть достаточно длинным, чтобы удерживать ваши значения int. Я не знаю, какие значения находятся в ваших фактических данных. Из вашего образца это должно быть не менее 2, но я выбрал 4, который будет обрабатывать значения до 9999. Не стесняйтесь настраивать этот размер в соответствии с вашими фактическими требованиями к данным. –

 Смежные вопросы

  • Нет связанных вопросов^_^