消除PLSQL / Oracle中的重复项

kd3sttzy  于 2022-11-22  发布在  Oracle
关注(0)|答案(2)|浏览(353)

我在构建子项出现的查询时遇到了问题。我在下面附上了数据和预期的最终结果。重要的是SubitemID不是常量。因此我不能在查询中输入“subitemid like itemid+1”之类的内容。下面是我的表:
| 项目ID|子项ID|类别|数值|
| - -|- -|- -|- -|
| X轴|X1型|小行星116113|一百一十五|
| X轴|X2型|小行星116113|一百一十五|
| X轴|X1型|小行星22254| 100个|
| X轴|X2型|小行星22254| 100个|
| Y型|第1年|小行星116113| 204、58|
| Y型|第二年|小行星116113| 204、58|
| Y型|四年|小行星22254|五百个|
| Y型|五年|小行星22254|五百个|
我想对每种类别类型的值求和。因此结果应为:
| 项目ID|类别|值总和|
| - -|- -|- -|
| X轴|小行星116113|一百一十五|
| X轴|小行星22254| 100个|
| Y型|小行星116113| 204、58|
| Y型|小行星22254|五百个|
换句话说,我需要对每个Category中的1行求和,因为每个Category中每个ItemID的Value都是常量。
编辑:我的疑问如下:

SELECT ItemID
    ,Category
    ,SUM(CASE WHEN Category = 116113 THEN ROUND(Value,4) else 0 end) as "Summary_cat1"
    ,SUM(CASE WHEN Category = 222540 THEN ROUND(Value,4) else 0 end) as "Summary_cat2"
,SUM(CASE WHEN Category in (116113,222540) THEN ROUND(Value,4) else 0 end) as "Summary_cat3"
    FROM TABLE
    GROUP BY ItemID, Category

预期结果:
| 项目ID|类别|摘要_类别1|摘要类别2|摘要_类别3|
| - -|- -|- -|- -|- -|
| X轴|小行星116113|一百一十五|100个|二百一十五|
| X轴|小行星22254|一百一十五|100个|二百一十五|
| Y型|小行星116113| 204、58|五百个|704、58分|
| Y型|小行星22254| 204、58|五百个|704、58分|

7tofc5zh

7tofc5zh1#

假设共享相同项目和类别的记录之间的值始终相同,则应在此处使用不同的查询:

SELECT DISTINCT ItemID, Category, Value
FROM yourTable;

另一方面,如果您确实要对这些值进行 * 求和 *,则应使用:

SELECT ItemID, Category, SUM(Value) AS SumOfValue
FROM yourTable
GROUP BY ItemID, Category;
vlju58qv

vlju58qv2#

您 可以 使用 FIRST_VALUELAST_VALUE 分析 函数 来 获取 每个 类别 的 两 个 单独 价格 。
注意 : 仅 当 每个 项目 正好 有 2 个 不同 的 值 时 , 此 查询 才 有效 。

WITH
    items (ItemID,
           SubitemID,
           Category,
           VALUE)
    AS
        (SELECT 'X', 'X1', '116113', 115 FROM DUAL
         UNION ALL
         SELECT 'X', 'X2', '116113', 115 FROM DUAL
         UNION ALL
         SELECT 'X', 'X1', '222540', 100 FROM DUAL
         UNION ALL
         SELECT 'X', 'X2', '222540', 100 FROM DUAL
         UNION ALL
         SELECT 'Y', 'Y1', '116113', 204.58 FROM DUAL
         UNION ALL
         SELECT 'Y', 'Y2', '116113', 204.58 FROM DUAL
         UNION ALL
         SELECT 'Y', 'Y4', '222540', 500 FROM DUAL
         UNION ALL
         SELECT 'Y', 'Y5', '222540', 500 FROM DUAL)
  SELECT DISTINCT
         itemid,
         category,
         FIRST_VALUE (VALUE) OVER (PARTITION BY itemid)     AS summary_cat1,
         LAST_VALUE (VALUE) OVER (PARTITION BY itemid)      AS summary_cat2,
           FIRST_VALUE (VALUE) OVER (PARTITION BY itemid)
         + LAST_VALUE (VALUE) OVER (PARTITION BY itemid)    AS summary_cat3
    FROM items i
ORDER BY itemid, category;

ITEMID    CATEGORY       SUMMARY_CAT1    SUMMARY_CAT2    SUMMARY_CAT3
_________ ___________ _______________ _______________ _______________
X         116113                  115             100             215
X         222540                  115             100             215
Y         116113               204.58             500          704.58
Y         222540               204.58             500          704.58

中 的 每 一 个

相关问题