这不会那不会 2024-08-08 17:13 采纳率: 59.5%
浏览 6
已结题

oracle数据库求解

这是我的查询sql 数据库是oracle的

select a,b,count(distinct cnlsh) as c,d
from dddddd a
where
--(a.hdzt not in('1','2')or a.hdzt is null) and
TRUNC(jsfsrq) = To_date('2024-08-05','yyyy/mm/dd')
and
((a = '902001' or b = '902001')or
(a = '903001' or b = '903001')or
(a = '904001' or b = '904001')or
( a = '301001' or b = '301001')or
(a = '403001' or b = '403001')or
( a = '801001' or b = '801001')or
( a = '316001' or b = '316001')or
( a = '905001' or b = '905001'))
group
by a,b,d ORDER BY d,a,b  

这是我查询到的结果集

img

我想达到当a和b相同时,就是都是902001的时候c字段是56+8的和,然后ab两个字段变成e字段值为902001
即为下图

img

数据和字段经过处理,请不在在意命名方式

  • 写回答

11条回答 默认 最新

  • 阿里嘎多学长 2024-08-08 17:17
    关注

    以下内容由AIGC及阿里嘎多学长共同生成、有用望采纳:


    根据您提供的信息和需求,我将给出一个修改后的SQL查询示例,以实现当字段ab相同时,将c字段的值累加,并将ab字段合并为一个新字段e。以下是修改后的SQL查询示例:

    SELECT 
        CASE 
            WHEN a = b THEN a 
            ELSE NULL 
        END AS e, -- 当a和b相同时,e字段显示a的值,否则为NULL
        SUM(CASE 
                WHEN a = b THEN COUNT(DISTINCT cnlsh) 
                ELSE 0 
            END) AS c, -- 当a和b相同时,累加cnlsh的计数
        d
    FROM 
        dddddd a
    WHERE 
        TRUNC(jsfsrq) = TO_DATE('2024-08-05','yyyy/mm/dd')
        AND
        a IN ('902001', '903001', '904001', '301001', '403001', '801001', '316001', '905001')
        AND
        b IN ('902001', '903001', '904001', '301001', '403001', '801001', '316001', '905001')
    GROUP BY 
        CASE 
            WHEN a = b THEN a 
            ELSE NULL 
        END, -- 这里使用CASE语句来决定分组依据
        d
    ORDER BY 
        d, 
        CASE 
            WHEN a = b THEN a 
            ELSE NULL 
        END; -- 排序也按照e的逻辑来
    

    示例输入和输出

    假设我们有以下输入数据(简化版,仅展示相关字段):

    abcnlshd
    902001902001xxxsome_value
    902001902001yyysome_value

    期望的输出将是:

    ecd
    90200156+8 (累加的cnlsh计数)some_value

    注意事项

    1. 上述SQL查询使用了CASE语句来决定e字段的值,以及在SUM函数中累加cnlsh的计数。
    2. 我将原始查询中的多个OR条件合并为a IN (...)b IN (...),以简化查询并提高效率。
    3. 这个解决方案假设ab字段在相同时,我们只使用a的值作为e的值。如果ab不相等,e字段将显示为NULL
    4. 请根据实际的数据库表结构和字段调整上述SQL查询。

    运行环境

    这个SQL查询应该在Oracle数据库环境中运行,确保数据库中存在dddddd表和相应的字段。在实际应用中,您可能还需要根据实际的数据和业务逻辑进一步调整和优化这个查询。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月9日
  • 赞助了问题酬金15元 8月8日
  • 创建了问题 8月8日