你如何总结和组合一个字符串
Posted
技术标签:
【中文标题】你如何总结和组合一个字符串【英文标题】:How do you sum and combine a string 【发布时间】:2016-09-08 13:46:53 【问题描述】:如何获得:
pn | min max
------ | ------
ABC123 | 0,0
ABC123 | 1,1
ABC123 | 1,1
ABC123 | 1,1
收件人:
pn | min max
------ | -------
ABC123 | 3,3
Oracle 数据库 11g
PL/SQL 11.2.4.0
这就是我现在拥有的:
SELECT
PN_INVENTORY_LEVEL.PN,
PN_INVENTORY_LEVEL.MAXIMUM_STOCK || ',' || PN_INVENTORY_LEVEL.MINIMUM_STOCK AS MIN_MAX
FROM
PN_INVENTORY_LEVEL
WHERE ("PN_INVENTORY_LEVEL"."PN" = :PN)
【问题讨论】:
您有一列以逗号分隔的值? 查看GROUP BY
和SUM()
。顺便说一句,为什么将数字存储为字符串?
【参考方案1】:
尝试使用
SELECT
PN_INVENTORY_LEVEL.PN,
Sum(PN_INVENTORY_LEVEL.MAXIMUM_STOCK) || ',' || sum(PN_INVENTORY_LEVEL.MINIMUM_STOCK) AS MIN_MAX
FROM
PN_INVENTORY_LEVEL
WHERE ("PN_INVENTORY_LEVEL"."PN" = :PN)
group by PN_INVENTORY_LEVEL.PN
【讨论】:
【参考方案2】:试试
SELECT pn, SUM(min) as min, SUM(max) as max FROM PN_INVENTORY_LEVEL GROUP BY pn
【讨论】:
这可行,但结果分为两个单独的列【参考方案3】:如果您在一列中有min_max
作为字符串,我相信这将是您的问题的答案(将tab
替换为your-table-name ):
WITH
tab1 AS(
SELECT t.pn,
t.min_max,
INSTR(t.min_max, ',',1) POS
FROM tab t
),
tab3 AS
(
SELECT tt.pn,
SUBSTR(tt.min_max, 1,tt.pos-1) st,
SUBSTR(tt.min_max,tt.pos+1,LENGTH(tt.min_max)-tt.pos) nd
FROM tab1 tt
)
SELECT ttt.pn,
SUM(ttt.st) || ',' || SUM(ttt.nd) min_max
FROM tab3 ttt
GROUP BY ttt.pn
它给了我结果:
1 ABC123 3,3
【讨论】:
非常感谢,但是下面帮助我获得了所需的结果。以上是关于你如何总结和组合一个字符串的主要内容,如果未能解决你的问题,请参考以下文章