我在IBM DB2数据库中有一个表;我们称之为表1。看起来有点像这样:
| 客户|信息|提供A型销售|提供B类销售|提供C型销售|
| --|--|--|--|--|
| AA| X| 10 | 20 | 30 |
| BB| Y| 0 | 10 | 15 |
| CC| X| 20 | 0 | 30 |
我想做的是换位提供类型列创建一个单一的列标记提供类型和一个单一的列显示销售。有谁知道如何最好地做到这一点,请?
所需的输出应如下所示:
| 客户|信息|报价类型|销售|
| --|--|--|--|
| AA| X|一| 10 |
| AA| X| B| 20 |
| AA| X| C| 30 |
| BB| Y| B| 10 |
| BB| Y| C| 15 |
| CC| X|一| 20 |
| CC| X| C| 30 |
3条答案
按热度按时间cnwbcb6i1#
可能有一种方法可以使用
unpivot
,但这里有一个使用union
的替代解决方案。| 客户|信息|报价类型|销售|
| --|--|--|--|
| AA| X|一| 10 |
| AA| X| B| 20 |
| AA| X| C| 30 |
| BB| Y|一| 0 |
| BB| Y| B| 10 |
| BB| Y| C| 15 |
| CC| X|一| 20 |
| CC| X| B| 0 |
| CC| X| C| 30 |
如果你不想要零行,那就添加一个where子句。
rsl1atfo2#
实际上,您正在寻找的是与枢轴操作相反的操作。我为你准备了一个
MSSQL
的例子。您可以使用
UNPIVOT
来执行此操作在
UNPIVOT
过程中,必须给予列标题。我使用CASE
WHEN
是因为它返回的值与这些列标题中的名称相同。测试结果:
| 客户|信息|报价铅字|销售|
| --|--|--|--|
| AA| X|一| 10 |
| AA| X| B| 20 |
| AA| X| C| 30 |
| BB| Y| B| 10 |
| BB| Y| C| 15 |
| CC| X|一| 20 |
| CC| X| C| 30 |
联合的例子也很好,但你可能想用这个。
如果列是动态的,并且不是固定的;(offer_type_a_sales,offer_type_B_sales,offer_type_c_sales,offer_type_d_sales,offer_type_e_sales等)如果有这样的结构,您可以将其带入EXEC并在外部给予与列部分相对应的位置。补充资料。
ghg1uchk3#
Db2不支持
UNPIVOT
子句,但有一个替代解决方案。| 客户|信息|优惠类型|优惠_类型_销售|
| --|--|--|--|
| AA| X|一| 10 |
| AA| X| B| 20 |
| AA| X| C| 30 |
| BB| Y|一| 0 |
| BB| Y| B| 10 |
| BB| Y| C| 15 |
| CC| X|一| 20 |
| CC| X| B| 0 |
| CC| X| C| 30 |
fiddle