2015-11-21 3 views
0

У меня есть эта таблица.конвертировать все строки в одну строку при расширении столбцов

+-------+-------+--------+------+--------+ 
| Level | Entry | Code | Name | Value | 
+-------+-------+--------+------+--------+ 
| L1 | 111 | Item_1 | pcs | 1 | 
| L2 | 222 | Item_2 | ctn | 6 | 
+-------+-------+--------+------+--------+ 

Я хочу задать вопрос.

+---------+--------+--------+---------+---------+--------+--------+---------+ 
| L1Entry | L1Code | L1Name | L1Value | L2Entry | L2Code | L2Name | L2Value | 
+---------+--------+--------+---------+---------+--------+--------+---------+ 
|  111 | Item_1 | pcs |  1 |  222 | Item_2 | ctn |  6 | 
+---------+--------+--------+---------+---------+--------+--------+---------+ 

Это может быть сделано путем

;with L1 AS 
(select Entry As L1Entry, Code As L1Code, Name As L1Name, Value As L1Value 
from table 
where Level = 'L1') 
, L2 AS 
(select Entry As L2Entry, Code As L2Code, Name As L2Name, Value As L2Value 
from table 
where Level = 'L2') 
select * from L1 
outer apply L2 

Есть ли лучший способ, чем это в производительности?

+0

Вы уверен, что It'sa хорошая идея, если у вас есть много записи вам придут получить таблицу километровый долго – Mihai

+0

@Mihai я хочу к? используйте его на таблице UOM. он имеет только 4 уровня UOM за один элемент. И я вижу только один пункт за раз. Таким образом, это не проблема. Я думаю, что есть лучший способ сделать окна. Я просто не знаю, как это сделать. –

+0

Почему вы не используете Pivot. – KumarHarsh

ответ

2

Вы преувеличиваете проблему. Это простое соединение, и я думаю, что Performace будет то же самое:

select * 
from table t1 
join table t2 on t1.level = 'l1' and t2.level = 'l2' 
+0

Молодцы. Ваш код имеет немного лучшую производительность, чем предоставленный CTE на моем ПК. –

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