2017-01-17 10 views
3

Я хочу скопировать столбцы из одной таблицы в другие таблицы в один столбец.Как скопировать значения Таблица с любыми столбцами в другие таблицы с одним столбцом

Мой главный стол - TBL_Sku2:

id  sku1      sku2    sku3     sku4   sku5  
---  -----------  ----------------- ------------------- -----------------  --------- 
1 1GBDDR3-1066-21  2GBDDR3-1066-21  4GBDDR3-1066-414   Null    Null 
2 512MBDDR2-533-1038   null    null      null   null 
3 1GBDDR2-533-1068  512MBDDR2-533-1033  Null     Null     Null 

Выход должен быть как:

Копия TBL_SKU_F1:

 Id      sku       
    -----------  ----------------- 
     1    1GBDDR3-1066 
     2    2GBDDR3-1066 
     3    4GBDDR3-1066 
     4    512MBDDR2-533 
     5    1GBDDR2-533 
     6    512MBDDR2-533 

Мои попытки до сих пор:

select 
    [SKU1], [SKU2], [SKU3], 
    [SKU4], [SKU5], [SKU6] 
from 
    [dbo].[TBL_Sku2] 
unpivot 
    (Sku for col_name in ([SKU1], [SKU2], [SKU3], [SKU4], [SKU5], [SKU6])); 

Query попытка # 2:

select 
    [SKU1], [SKU2], [SKU3], [SKU4], [SKU5], [SKU6] 
from 
    [dbo].[TBL_Sku2] 
cross apply 
    (values('SKU1', [SKU1]), ('SKU2', [SKU2]), ('SKU3', SKU3), 
      ('SKU4', SKU4), ('SKU5', SKU5), ('SKU6', SKU6)) c(col, value) 
where 
    value is not null 

Я не могу вставить или преобразовать эти столбцы в один столбец ...

+1

я редактировал вопрос, пожалуйста, смотрите, если он correct..Also я удалил эту строку 'если столбец Id не мог, не need.', так как я предположил, что вы не нужны аннулирует и это может быть выведено из вывода – TheGameiswar

+3

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

+0

спасибо @ TheGameiswar, нет решения? – RedArmy

ответ

3
select row_number() over(order by (select null)) as id, 
b.* from #temp t 
cross apply 
(
values(sku1), 
     (sku2), 
     (sku3), 
     (sku4), 
     (sku5) 
) b(final) 
where final is not null 
+0

Спасибо @TheGameiswar, хорошо .thanks – RedArmy

+0

canu help me this link: (http: //dba.stackexchange. com/questions/161199/how-to-split-value-of-column-to-one-column-in-sql-server? noredirect = 1 # comment310176_161199) и ответьте здесь (http://stackoverflow.com/ вопросы/41661155/как к раздельным стоимости из-столбца к динамическому колонку-в-SQL-сервер) – RedArmy

1

Вы были очень близки с попыткой 1:

 SELECT row_number() over (order by (select null)) as id, u.sku 
    FROM [dbo].[TBL_Sku2] 
    UNPIVOT (
     Sku 
     FOR SkuName IN (
      [SKU1] 
      ,[SKU2] 
      ,[SKU3] 
      ,[SKU4] 
      ,[SKU5] 
      ,[SKU6] 
)) AS u; 

Теперь вы может нормализовать!

+0

Спасибо @Edward, попробовав xml + sql :) – RedArmy

+1

Я пропустил номер строки - добавлено с ответа TheGameiswar – Edward

+0

хорошее решение вы и TheGameiswar – RedArmy

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

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