你如何总结和组合一个字符串

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 BYSUM()。顺便说一句,为什么将数字存储为字符串? 【参考方案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

【讨论】:

非常感谢,但是下面帮助我获得了所需的结果。

以上是关于你如何总结和组合一个字符串的主要内容,如果未能解决你的问题,请参考以下文章

排列组合总结

文字编码总结

labview 数组中相邻元素抽取和组合(截取)

计数和迭代序列的排列

C#转义字符总结

如何组合字符串并制作一个数组?