将多个返回行连接成一行(标准方法由于某种原因不起作用)

时间:2016-08-04 20:55:27

标签: postgresql concatenation aggregate

我有一个相对无聊的问题。我之所以这么说是因为我觉得我只是错过了这里显而易见的。我只是做了许多人已经做过的事情,并且之前已经问过,但我之前使用的典型方法都不起作用。希望这只是我错过了一些简单的东西。

下面是我正在处理的更大查询的一部分,但我只是尝试将两行只有一列不同的数据组合成一行,其中相似的列用分隔符分隔。对CONCAT或STRING_AGG来说很容易吗?....对我来说不起作用,我不知道为什么。

SELECT  array_to_string(array_agg(ls_number), ',') "ls_number", 
            --Also tried CONCAT(ls_number, ',') and string_agg(ls_number, ',') 
            --and they don't work
        shipitem_shiphead_id, 
        shipitem_orderitem_id,
        shiphead_number

FROM    shipitem
        LEFT JOIN invhist
            ON (shipitem_invhist_id=invhist_id)
        LEFT JOIN invdetail 
            ON (invhist_id=invdetail_invhist_id)
        LEFT JOIN ls
            ON (invdetail_ls_id=ls_id)
        LEFT JOIN shiphead
            ON (shiphead_id = shipitem_shiphead_id)

WHERE   shiphead_number = '72211'

GROUP BY ls_number,
        shiphead_number, 
        shipitem_shiphead_id, 
        shipitem_orderitem_id

运行上述查询时的结果:

LINK: RESULTS WINDOW.PNG

您可以从上面的结果窗口中看到批号被分成2行。我需要它们在一行上,批号由分隔符','分隔。有人可以解释我在这里缺少的东西吗?提前一堆谢谢!

1 个答案:

答案 0 :(得分:0)

您的ls_number子句中有group by,这意味着您会在结果中为其中的每个不同值获取不同的行。从group by子句中删除它,你应该没问题。