【发布时间】:2018-03-04 09:51:30
【问题描述】:
我有以下疑问:
select configurationfromintarray(1,string_to_array('4441,4945',',')::int[]) as config,
p.partname,rtrim(sum(distinct a.ref || ','),',') as refs,
p.partid as partid,
from productiongeneratebom(string_to_array('4441,4945',',')::int[],2405) a
join .....
group by configurationfromintarray(1,string_to_array('4441,4945',',')::int[]),
p.partname,p.partid
结果如下:
config partname refs partid
SBC1 test1 C250,C252 7102
SBC1 test2 C344,C419,C421 1034
SBC2 test45 C111 3986
查询在函数中运行,并且信息参数会相应更改。
基本上这意味着对于配置SBC1,我需要将部分test1 放在参考文献C250,C252 中。我不知道需要放置的数量。所以我需要添加一个显示该信息的列。
FROM 集群还有一个名为 quantity 的列。
如果我这样做
select ref,partid,quantity
from productiongeneratebom(string_to_array('4441,4945',',')::int[],2405) a
where partid=7102 order by ref
我会得到:
ref partid quanity
C250 7102 1
C252 7102 3
我想修改我的查询,使其也有一列包含所需的总数量。 所以在上面的例子中它将是:
config partname refs partid QUANTITY
SBC1 test1 C250,C252 7102 4 // 3 from C250, 1 from C252
SBC1 test2 C344,C419,C421 1034 ?
SBC2 test45 C111 3986 ?
我尝试使用:
sum(a.quantity) OVER (PARTITION BY rtrim(sum(distinct a.ref || ','),',')) AS quantity 但它不起作用。它说:
错误:列“a.quantity”必须出现在 GROUP BY 子句中,否则 在聚合函数中使用
我该如何解决?这种求和应该很难实现。
编辑: 如果我从
中删除不同的单词p.partname,rtrim(sum(distinct a.ref || ','),',') as refs,
我会得到:
config partname refs partid
SBC1 test1 C250,C252,C252,C252,C252,C250,C250,C250 7102
distinct 确保我只会看到每个 ref 一次。但是我不能使用 distinct 关键字来求和,所以如果我简单地添加:
sum (a.quantity) 我会得到不正确的结果。
config partname refs partid quantity
SBC1 test1 C250,C252,C252,C252,C252,C250,C250,C250 7102 16
我只需要对每个 ref 的数量求和一次!
【问题讨论】:
标签: sql postgresql