2014-02-07 4 views
7

Я пытаюсь PIVOT некоторые данные в таблице, но я не могу этого сделать, потому что я не нахожу способ сделать это, используя столбцы carchar. У меня есть эта таблица:PIVOT с varchar datatype

enter image description here

И что мне нужно это:

enter image description here

Мне нужно использовать данные строки 'ug_label' в качестве столбцов. Поскольку тип данных VARCHAR, я не могу использовать функцию agregate внутри PIVOT.

Я думаю, что, возможно, нужно что-то вроде этого:

SELECT * 
FROM 
(SELECT [c_id] 
     ,[c_lname] as [Apellido] 
     ,[c_fname] as [Nombre] 
     ,[c_nick_name] as [documento]  
     ,[ut_text] 
     ,f.ug_label 
    FROM [pegasys].[dbo].[cardholder] c 
    inner join [pegasys].[dbo].[udftext] u on c.c_id = u.ut_cardholder_id 
    inner join [pegasys].[dbo].[udfgen] f on u.ut_udfgen_id = f.ug_id) AS S 
PIVOT 
(
    UT_TEXT 
    FOR 
    [UG_LABEL] 
    IN ([Torre], [Cuit], [Empresa], [Departamento]) 
) as s 

Может кто-нибудь мне помочь ??.

Спасибо.

ответ

16

Вы можете использовать функцию PIVOT, чтобы получить результат, но так как вы агрегирование с varchar вы должны использовать либо max или min:

SELECT * 
FROM 
(
    SELECT [c_id] 
     ,[c_lname] as [Apellido] 
     ,[c_fname] as [Nombre] 
     ,[c_nick_name] as [documento]  
     ,[ut_text] 
     ,f.ug_label 
    FROM [pegasys].[dbo].[cardholder] c 
    inner join [pegasys].[dbo].[udftext] u on c.c_id = u.ut_cardholder_id 
    inner join [pegasys].[dbo].[udfgen] f on u.ut_udfgen_id = f.ug_id 
) d 
PIVOT 
(
    max(ut_text) 
    FOR UG_LABEL IN ([Torre], [Cuit], [Empresa], [Departamento]) 
) p 
+0

Спасибо человеку, который работал. Просто. – NicoRiff

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