我有以下查询:
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
查询在函数中运行,info参数也相应更改。基本上它意味着对于配置SBC1
我需要将部分test1
放在refs 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
确保我只会看到每个参考一次。但是我不能使用distinct
关键字来计算数量,所以如果我只是添加:sum(a.quantity)我会得到不正确的结果。
config partname refs partid quantity
SBC1 test1 C250,C252,C252,C252,C252,C250,C250,C250 7102 16
我需要它只能将每个参考的数量相加一次!
我会从一个简单的sum(quantity)
开始:
select configurationfromintarray(1,string_to_array('4441,4945',',')::int[]) as config,
p.partname, rtrim(sum(distinct a.ref || ','),',') as refs,
p.partid as partid,
sum(quantity)
from productiongeneratebom(string_to_array('4441,4945',',')::int[],2405) a join .....
group by config, p.partname, p.partid;
如果要组合多行的值,可以使用窗口函数。