如何在Sql Server的unpivot查询中更新列?我的查询附在下面。

5
我正在尝试在我的查询中添加列,如下所示:
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"?

希望你能给出建议。

谢谢。


我没有理解你的回答? - user3664724
从tableMonth t中选择Name作为[holiday_name],并对(m1,m2,m3, cast(sf1 as decimal(18,16))as sf1,cast(sf2 as decimal(18,16))as sf2)进行UNPIVOT操作,其中ID != 0.0且D_No ='0700'。 - user3664724
只需尝试处理它,我已为您提供链接。 - mohan111
@mohani 我在其他列中也没有使用强制转换,那么为什么我要在这里使用强制转换呢?而且它对我也没有帮助。在我提到这些列名之前是否创建了任何临时表? - user3664724
你能提供一个 SQL Fiddle,展示你想要实现的例子吗? - Code Different
显示剩余4条评论
1个回答

2

使用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;

我相信这是您的要求。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接