添加列并返回合并数据

Jun*_*idJ 1 sql oracle

有人可以帮助我编写SQL查询来计算/显示以下示例:

桌子 - 发货

- 产品代码/数量/唯一代码

          sku a   |    5   | nnnn
          sku a   |    5   | nn
          sku a   |    10  | (blank)
          sku b   |    2   | nnn
          sku c   |    2   | (blank)
          sku c   |    2   | (blank)
Run Code Online (Sandbox Code Playgroud)

我正在寻找这样的输出:

- 产品代码/数量/唯一代码

          sku a   |    20   | nnnn, nn
          sku b   |    2    | nnn
          sku c   |    4    | (blank)
Run Code Online (Sandbox Code Playgroud)

goo*_*ans 5

LISTAGG是你的救世主.

SELECT 
  product_code, 
  SUM(qty) as total_qty, 
  LISTAGG(unique_code, ',') WITHIN GROUP (ORDER BY unique_code)
FROM
  shipment
GROUP BY
  product_code
Run Code Online (Sandbox Code Playgroud)

编辑:在这里给出答案以获得更好的代码输出:

你有"我".在listagg中的字段前面,但是没有表别名.此外,您需要将pallet_id添加到组中.试试这个

SELECT 
  reference_id, 
  pallet_id, 
  SUM(update_qty) as total_qty, 
  LISTAGG(user_def_type_1, ',') WITHIN GROUP (ORDER BY user_def_type_1)
FROM
  inventory_transaction 
WHERE
  code = 'Shipment' AND site_id = 'GBRUN2A' AND client_id = '021' AND dstamp >= current_date -21 
GROUP BY 
  reference_id, pallet_id
Run Code Online (Sandbox Code Playgroud)

如果您仍然收到错误,可以确认您使用的是Oracle吗?我很确定这是一个仅限Oracle的功能.

是 - 使用Oracle Sql Developer版本4.0.1.14

ETA:您能否确认您正在运行的Oracle数据库版本?Listagg仅适用于Oracle 12c和Oracle 11g第2版.如果您运行的是以前的版本,请查看其他一些备选方案.