有人能帮助我把数据从源表转换成我想要的结果表吗?
我想根据源中列出的"类型"创建新的列名,但用于填充的值来自"货币"?希望这有意义。我创建了结果表来显示我试图创建的内容。
源表
| 日期|身份证|类型|通货|
| - ------|- ------|- ------|- ------|
| 小行星20230112|1个|通信|美元|
| 小行星20230112|1个|交换|美元|
| 小行星20230119|第二章|通信|美元|
| 小行星20230119|第二章|交换|英镑|
结果表
| 日期|身份证|通信|兑换货币|
| - ------|- ------|- ------|- ------|
| 小行星20230112|1个|美元|美元|
| 小行星20230112|第二章|美元|英镑|
2条答案
按热度按时间mv1qrgav1#
这里是DBFiddle demo
编辑:它是如何工作的?如果我们删除MAX()和GROUP BY:
会得到这样的结果
| 日期|身份证|通信|汇率|
| - ------|- ------|- ------|- ------|
| 2023年1月12日|1个|美元|* 无效 |
| 2023年1月12日|1个| 无效 |美元|
| 2023年1月19日|第二章|美元| 无效 |
| 2023年1月19日|第二章| 无效 *|英镑|
如果我们想将这些行减少到每个Date,id为1,我们需要一个GROUP BY。而GROUP BY要求我们为所有未在GROUP BY列表中列出的字段提供一个聚合函数(日期和ID). MAX()和MIN()是我们可以在字符串类型上使用的聚合函数,并且聚合不会考虑NULL,这正是我们所需要的。我们使用MAX()或MIN()只是为了消除NULL。因此,使用MAX()或MIN()和GROUP BY:
结果:
| 日期|身份证|通信|汇率|
| - ------|- ------|- ------|- ------|
| 2023年1月12日|1个|美元|美元|
| 2023年1月19日|第二章|美元|英镑|
DBfiddle demo
ljsrvy3e2#
两个快速选择。
条件聚合。通常性能更高,灵活性更强
枢轴-带有一些限制