Sql server 如何保持某些列的原样并动态透视SQL Server 2012中的最后一列

Sql server 如何保持某些列的原样并动态透视SQL Server 2012中的最后一列,sql-server,tsql,pivot,unpivot,Sql Server,Tsql,Pivot,Unpivot,我有一个表,有5列,值为0或1,最后一列QuoteStatus是VARCHAR类型 我想保持ControlNo和其他4列不变,但最后一列需要进行透视,并且还要赋值0或1 它可以有两个以上的值:丢失或无操作 现在的数据如下所示: 但我希望它看起来像这样: SELECT * FROM @Table1 a PIVOT ( COUNT(QuoteStatus) FOR QuoteStatus IN ( [Lost], [No Action] ) b 我想你要找的是操作员,对于这个问题,我想你可以用这样

我有一个表,有5列,值为0或1,最后一列QuoteStatus是VARCHAR类型

我想保持ControlNo和其他4列不变,但最后一列需要进行透视,并且还要赋值0或1

它可以有两个以上的值:丢失或无操作

现在的数据如下所示:

但我希望它看起来像这样:

SELECT *
FROM @Table1 a
PIVOT ( COUNT(QuoteStatus) FOR QuoteStatus IN ( [Lost], [No Action] ) b

我想你要找的是操作员,对于这个问题,我想你可以用这样的方法得到你想要的结果:

SELECT *
FROM @Table1 a
PIVOT ( COUNT(QuoteStatus) FOR QuoteStatus IN ( [Lost], [No Action] ) b

我们应该使用动态查询来实现结果

在动态查询中:

表变量仅在定义它们的范围内可见。它们就像正常的变量。我使用临时表而不是表变量。 如果对象_ID'tempdb..A'不是NULL,则删除表A 如果对象_ID'tempdb..table1'不是NULL,则删除表table1

创建表1 ControlNo INT, 绑定整数, 谢绝INT, 额定整数, 引述INT, 瓦查尔报价表50

在表1中插入控制编号、绑定、拒绝、评级、报价、QuoteStatus 价值观 1111,1,0,1,1,“丢失”, 2222,0,1,0,1,“不采取行动”, 3333,1,1,0,0,空, 4444,1,0,0,1,“丢失”, 5555,0,1,1,1,“不采取行动”

将@columns声明为NVARCHARMAX, @最终查询为NVARCHARMAX

设置@columns=STUFFSELECT distinct','+QUOTENAMEQuoteStatus 来自表1 对于XML路径,键入 .value'.'和'NVARCHARMAX' ,1,1

set@finalquery= 选择 p、 控制号,p.绑定,p.拒绝,p.评级,p.引用,“+@columns+” 变成 从…起 选择 控制编号、绑定、拒绝、评级、报价、报价状态 来自表1 A. 支点 最大值 对于'+@columns+'中的QuoteStatus p'

exec@finalquery

挑选 控制编号、绑定、拒绝、评级、报价、, 丢失时的大小写='丢失',然后1或0以丢失结束, 当[no action]=“no action”时,则1或0结束为[no action] 从