我看了看板子并搜索了一堆,但我找不到适合我的场景。我有4列
+--------+------+------+
| empnum | appn | rate |
+--------+------+------+
| 13 | 1111 |12.34 |
+--------+------+------+
| 13 | 2222 |14.44 |
+--------+------+------+
| 13 | 3333 |15.62 |
+--------+------+------+
| 13 | 4444 |16.12 |
+--------+------+------+
每列具有相同的员工编号但信息不同。我试图将这4列合并为1.我唯一能找到的就是连接。但这对我不起作用,因为这些需要进入一个数组,所以我可以在数据表中构建它。我希望它看起来像这样。
+------+-----+-----+-----+-----+-----+-----+-----+-----+
|empnum|appn1|rate1|appn2|rate2|appn3|rate3|appn4|rate4|
+------+-----+-----+-----+-----+-----+-----+-----+-----+
| 13 |1111 |12.34|2222 |14.44|3333 |15.62|4444 |16.12|
+------+-----+-----+-----+-----+-----+-----+-----+-----+
截至一周前,所有这些信息都来自平面文件。一位同事创建了一个关系表,就在我大脑爆炸的时候。我们正在研究Db2,我尝试在php中使用foreach循环遍历数组并查找empnum,但我会为每个人获得相同的appn1。我想做sql我只是想不出怎么做。
答案 0 :(得分:0)
您想要的是透视数据。 DB2没有PIVOT函数,但您可以使用DECODE来实现此目的。以下是another question中的一些示例。
结果集看起来像:
+------+-----+-----+-----+-----+-----+-----+
|empnum|appn1111|appn2222|appn3333|appn4444|
+------+--------+--------+--------+--------+
| 13 |12.34 |14.44 |15.62 |16.12 |
+------+--------+--------+--------+--------+
答案 1 :(得分:0)
您也可以使用LISTAGG执行此操作以获取逗号分隔列表。
像这样:
SELECT empnum, LISTAGG(TO_CHAR(appn) || ' - ' || TO_CHAR(rate), ', ') as a_list_4_u
FROM mytable
结果应如下所示
+--------+--------------------------------------------------------+
| empnum | 2 |
+--------+--------------------------------------------------------+
| 13 | 1111 - 12.34, 2222 - 14.44, 3333 - 15.62, 4444 - 16.12 |
+--------+--------------------------------------------------------+