【问题标题】: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()。顺便说一句,为什么将数字存储为字符串?

标签: sql plsql oracle11g


【解决方案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
    

    【讨论】:

    • 非常感谢,但是下面帮助我获得了所需的结果。
    猜你喜欢
    • 2020-03-13
    • 2012-06-23
    • 2018-06-14
    • 1970-01-01
    • 2011-07-14
    • 2022-01-18
    • 2023-03-14
    • 2011-07-25
    • 2013-12-25
    相关资源
    最近更新 更多