2014-11-24 3 views
0

В базе данных, она содержит таблицуUNPIVOT Период Таблица

ID Name MTH201401UN MTH201401LC MTH201312UN MTH201312LC MTH201311UN MTH201311LC 

    1 A  200   300   400   500   600  700 

Хочет unpivoted таблицы, как показано ниже:

ID Name Period  UN LC 

    1  A MTH201401 200 300 
    1  A MTH201312 400 500 
    1  A MTH201311 600 700 

Главного периода не фиксируется, но MTH часть фиксируется как может Я делаю это, что может занять периоды, не говоря уже о нем?

ответ

0

Это может помочь вам: Это предполагает, что LC и UN фиксированы

SAMPLE DATA

create table temp(
    ID int, 
    Name varchar(10), 
    MTH201401UN int, 
    MTH201401LC int, 
    MTH201312UN int, 
    MTH201312LC int, 
    MTH201311UN int, 
    MTH201311LC int 
) 
insert into temp 
select 1, 'A', 200, 300, 400, 500, 600, 700 

РЕШЕНИЕ Использование динамических SQL

declare @sql varchar(4000) = '' 

select @sql = @sql + ' 
select 
    Id 
    ,Name' + ' 
    ,''' + column_name + ''' as Period' + ' 
    ,' + column_name + 'LC as LC' + ' 
    ,' + column_name + 'UN as UN' + char(10) + 
'from temp 
' + 
case 
    when rn < cc then 'union all' 
    else '' 
end 
from (
    select 
     + column_name as column_name, 
     row_number() over(order by column_name) as rn, 
     count(*) over(partition by (select null)) as cc 
    from (
     select distinct 
      substring(column_name, 0, len(column_name) - 1) as column_name  
     from information_schema.columns 
     where 
      table_name = 'temp' 
      and column_name not in('ID','Name') 
    )a 
)t 

print @sql 

exec(@sql) 

drop table temp 
+0

Но проблема в следующий раз, когда период изменится как MTH201312, MTH201401, MTH201402 вот так – SaNa3819

+0

Я вижу сейчас. Я обнов его позже. –

+0

Установлены ли ООН и ЖК? –

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