【问题标题】:Concatenate Multiple Returned Rows Into One Row (standard methods don't work for some reason)将多个返回的行连接成一行(标准方法由于某种原因不起作用)
【发布时间】:2016-08-04 20:55:27
【问题描述】:

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

下面是我正在处理的更大查询的一部分,但我只是试图将只有一列数据不同的两行组合成一行,其中相似的列由分隔符分隔。使用 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

上述查询运行时的结果:

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

【问题讨论】:

    标签: postgresql concatenation aggregate


    【解决方案1】:

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

    【讨论】:

    • 哈!我有一种感觉,这是显而易见的。非常感谢,工作就像一个魅力。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多