【问题标题】:SQL unpivot over 2 columns and keep the mapping [duplicate]SQL取消2列并保留映射[重复]
【发布时间】:2021-06-09 17:46:36
【问题描述】:

试图找到解决方案,但到目前为止没有任何用处。我正在尝试从此格式转换 SQL 表:

+-----------+-------+--------+
| ProductID | Price | Client |
+-----------+-------+--------+
| bread     |    12 | A      |
| bread     |    13 | B      |
| bread     |    14 | C      |
| bread     |    15 | E      |
| sodapop   |     5 | A      |
| sodapop   |     6 | B      |
| sodapop   |     7 | C      |
| sodapop   |     8 | D      |
+-----------+-------+--------+

到这里

+-----------+----------------+----------------+----------------+----------------+--+
| ProductID | Client A Price | Client B Price | Client C Price | Client D Price |  |
+-----------+----------------+----------------+----------------+----------------+--+
| bread     |             12 |             13 |             14 |             15 |  |
| sodapop   |              5 |              6 |              7 |              8 |  |
+-----------+----------------+----------------+----------------+----------------+--+

【问题讨论】:

  • 到目前为止你尝试过什么?客户是固定的吗?您的源数据中有客户端 E,但结果中没有。
  • 我已经尝试了提供的解决方案,不幸的是我得到了 2 个错误:Msg 8114, Level 16, State 1, Line 74 将数据类型 nvarchar 转换为浮点数时出错。消息 473,级别 16,状态 1,第 74 行 PIVOT 运算符中提供了不正确的值“Column1”。我已经完成了“CAST(Price AS FLOAT) AS Price”,但没有解决问题。还测试了 SELECT MAX(Price) FROM #temptable,它正在工作。

标签: sql sql-server tsql


【解决方案1】:

pivot 语法是这样的:

SELECT * 
FROM 
( SELECT * FROM parts) src
PIVOT  ( MAX(Price) FOR CLient IN (A,B,C,D,E)
) AS pvt 

【讨论】:

  • 我已经尝试了提供的解决方案,不幸的是我得到了 2 个错误:消息 8114,级别 16,状态 1,第 74 行错误将数据类型 nvarchar 转换为浮点数。消息 473,级别 16,状态 1,第 74 行 PIVOT 运算符中提供了不正确的值“Column1”。我已经完成了“CAST(Price AS FLOAT) AS Price”,但没有解决问题。还测试了 SELECT MAX(Price) FROM #temptable,它正在工作。
猜你喜欢
  • 2011-09-25
  • 2021-11-01
  • 1970-01-01
  • 2010-12-26
  • 2023-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-16
相关资源
最近更新 更多