Как обновить столбцы в запросе unpivot моего Query, подключенного к Sql-серверу?

я пытаюсь добавить столбец в свой запрос, как показано ниже,

SELECT Name as [holiday_name] FROM tableMonth t UNPIVOT (ID for Name in (m1,m2,m3,sf1,sf2)) u WHERE ID != 0.0 and D_No ='0700'

этот запрос работал нормально, но когда я добавляю «sf1» и «sf2», он выдает ошибку

"The type of column "sf1" conflicts with the type of other columns specified in the UNPIVOT list."

как мне выполнить запрос, упомянутый выше, со столбцом, который я хочу обновить, например «sf1» и «sf2»

надеюсь на ваши предложения

Спасибо


person user3664724    schedule 20.08.2014    source источник
comment
приведите столбец с помощью varchar(255)   -  person mohan111    schedule 20.08.2014
comment
я не понял вашего ответа?   -  person user3664724    schedule 20.08.2014
comment
stackoverflow.com/questions/11158017/   -  person mohan111    schedule 20.08.2014
comment
ВЫБЕРИТЕ имя как [holiday_name] FROM tableMonth t UNPIVOT (ID для имени в (m1, m2, m3, cast (sf1 как десятичное число (18,16)) as sf1, cast (sf2 как десятичное число (18,16)) as sf2) u ГДЕ ID != 0.0 и D_No = '0700'   -  person user3664724    schedule 20.08.2014
comment
@mohan теперь должно быть так, как указано выше?   -  person user3664724    schedule 20.08.2014
comment
неправильный синтаксис в (   -  person user3664724    schedule 20.08.2014
comment
просто попробуйте поработать над этим, я предоставил вам ссылку.   -  person mohan111    schedule 20.08.2014
comment
@mohani я тоже не использую приведение в другом столбце, так почему я должен использовать приведение в нем, и это мне тоже не помогает. Есть ли какая-либо временная таблица, созданная ранее, где я упомянул имя этого столбца?   -  person user3664724    schedule 21.08.2014
comment
Можете ли вы дать SQL Fiddle с примером того, чего вы хотите достичь?   -  person Code Different    schedule 26.08.2014


Ответы (1)


Один из способов создания нового столбца во время UNPIVOT

CREATE TABLE pvt (VendorID int, Emp1 int, Emp2 int,
    Emp3 int, Emp4 int, Emp5 int);
GO
INSERT INTO pvt VALUES (1,4,3,5,4,4);
INSERT INTO pvt VALUES (2,4,1,5,5,5);
INSERT INTO pvt VALUES (3,4,3,5,4,4);
INSERT INTO pvt VALUES (4,4,2,5,5,4);
INSERT INTO pvt VALUES (5,5,1,5,5,5);
GO


    SELECT VendorID, newcolumn, Orders,
case when len(VendorID) > 1 then ' ' end newcolumn1 ,
case when len(VendorID) > 1 then ' ' end newcolumn2 
    FROM 
   (SELECT VendorID, emp1,emp2,emp3,emp4,emp5
   FROM pvt) p
UNPIVOT
   (Orders FOR newcolumn IN (emp1,emp2,emp3,emp4,emp5)
)AS unpvt;

Я считаю, что это ваше требование.

person SQLMike    schedule 24.09.2014