Объединение нескольких столбцов таблицы в один столбец, где значение первого столбца определяет новые строки - PullRequest
0 голосов
/ 14 января 2012

В основном мне нужно взять 3 столбца из таблицы и объединить их в строки строк, используя значение первого столбца.

Запуск базового вывода с использованием:

    select ItemID, Month, Year
      from tableA 
        where ID = @id

Выход:

ItemID Month Year

 1. 4 1 2012
 2. 4 2 2012
 3. 4 3 2012
 4. 4 6 2012
 5. 4 8 2012
 6. 12 1 2012
 7. 12 2 2012
 8. 12 4 2012
 9. 12 5 2012
 10. 12 6 2012
 11. 12 7 2012
 12. 53 8 2012
 13. 53 9 2012

Вывод, который я пытаюсь получить, должен выглядеть примерно так:

 1. 41201222012320126201282012
 2. 12120122201242012520126201272012
 3. 538201292012

По сути, объединение всех ItemID с одинаковым номером и добавление месяца и года к концу этой строки до тех пор, пока не будет больше, а затем начало новой строки при появлении нового ItemID.

Я пробовал различные временные таблицы и сводные таблицы, но мне не удалось заставить его правильно выводить данные. Любая помощь будет оценена.

Спасибо

Итак, используя это:

    declare @table table (idmy varchar(8))

insert into @table
    select cast(ItemID as varchar(2)) + 
        cast(Month as varchar(2)) + 
        cast(Year as varchar(4)) as idmy
        from TableA
            where ID = @id

select idmy from @table 

Я могу получить вывод:

idmy
 1. 412012
 2. 422012
 3. 432012
 4. 462012
 5. 482012
 6. 1212012
 7. 1222012
 8. 1242012
 9. 1252012
 10. 1262012
 11. 1272012
 12. 5382012
 13. 5392012

Теперь, чтобы объединить все как начальные строки, делая выше ...

Ответы [ 2 ]

0 голосов
/ 14 января 2012
create table #tableA
(ItemID int, Month int, Year int)

insert into #tableA
values (4, 1, 2012)
insert into #tableA
values (4, 2, 2012)
insert into #tableA
values (4, 2, 2012)
insert into #tableA
values (4, 3, 2012)
insert into #tableA
values (4, 4, 2012)
insert into #tableA
values (4, 6, 2012)
insert into #tableA
values (4, 8, 2012)
insert into #tableA
values (12, 1, 2012)
insert into #tableA
values (12, 2, 2012)
insert into #tableA
values (12, 4, 2012)
insert into #tableA
values (12, 6, 2012)
insert into #tableA
values (12, 7, 2012)
insert into #tableA
values (53, 8, 2012)
insert into #tableA
values (53, 9, 2012)



declare @results as table
(line varchar(max))

declare @currentItemId int
set @currentItemId = -1

declare @str varchar(max)

while(@currentItemId is not null)
begin

    set @str = ''

    select @currentItemId=min(ItemID)
    from #tableA
    where @currentItemId < ItemID

    if(@currentItemId is null)
        break

    select @str=@str+cast(Month as varchar)+cast(Year as varchar)
    from #tableA
    where ItemID = @currentItemId
    order by Year, Month

    insert into @results
    select cast(@currentItemId as varchar)+@str

end

select *
from @results

Создает:

412012220122201232012420126201282012
121201222012420126201272012
538201292012
0 голосов
/ 14 января 2012
select 
coalesce(cast(itemid as nvarchar(4)),'') +
coalesce(cast([1] as nvarchar(500)),'') +
coalesce(cast([2] as nvarchar(500)),'') +
coalesce(cast([3] as nvarchar(500)),'') +
coalesce(cast([4] as nvarchar(500)),'') +
coalesce(cast([5] as nvarchar(500)),'') +
coalesce(cast([6] as nvarchar(500)),'') +
coalesce(cast([7] as nvarchar(500)),'') data
from 
(select itemid, 
    cast(Month as varchar(2)) + 
    cast(Year as varchar(4)) as idmy,
    row_number() over (partition by itemid order by cast(ItemID as varchar(2)) + cast(Month as varchar(2)) + cast(Year as varchar(4))) rownum
from test
) f
pivot (max(idmy) for rownum in ([1], [2], [3], [4], [5], [6], [7])) p

Я использовал оконную функцию row_number, чтобы получить порядок каждой строки, а затем повернуть каждую в свой собственный столбец, который затем преобразуется в вышеприведенный varchar, который объединяется после группировки по itemid

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...