Oracle语句需要加一个判定条件

Oracle语句需要加一个判定条件

SELECT *
FROM (
    SELECT r.STCD, SUM(r.DRP) AS DRP_SUM, b.STNM, b.STLC, b.ADMAUTH
    FROM RWDB.ST_PPTN_R r
    LEFT JOIN RWDB.ST_STBPRP_B b ON r.STCD = b.STCD
    WHERE r.TM >= SYSDATE - INTERVAL '1' HOUR
    GROUP BY r.STCD, b.STNM, b.STLC, b.ADMAUTH
    ORDER BY SUM(r.DRP) DESC
)
WHERE ROWNUM <= 40;

里面要加上ST_STBPRP_B表的FRGRD字段不等于 5的判定条件

SELECT *
    FROM (
        SELECT r.STCD, SUM(r.DRP) AS DRP_SUM, b.STNM, b.STLC, b.ADMAUTH
        FROM RWDB.ST_PPTN_R r
        LEFT JOIN RWDB.ST_STBPRP_B b ON r.STCD = b.STCD
        WHERE r.TM >= SYSDATE - INTERVAL '1' HOUR
          AND b.FRGRD <> 5 -- 加上这条判定条件
        GROUP BY r.STCD, b.STNM, b.STLC, b.ADMAUTH 
        ORDER BY SUM(r.DRP) DESC
    )
    WHERE ROWNUM <= 40;

SELECT *
FROM (
    SELECT r.STCD, SUM(r.DRP) AS DRP_SUM, b.STNM, b.STLC, b.ADMAUTH
    FROM RWDB.ST_PPTN_R r
    LEFT JOIN RWDB.ST_STBPRP_B b ON r.STCD = b.STCD
    WHERE r.TM >= SYSDATE - INTERVAL '1' HOUR
    AND b.FRGRD != 5 -- 添加判定条件
    GROUP BY r.STCD, b.STNM, b.STLC, b.ADMAUTH
    ORDER BY SUM(r.DRP) DESC
)
WHERE ROWNUM <= 40;

在这个修改后的查询中,添加了AND b.FRGRD != 5条件来筛选出ST_STBPRP_B表中FRGRD字段不等于5的记录。这样修改后的查询结果将会排除满足此条件的记录。

改后的,你试下:

SELECT *
FROM (
    SELECT r.STCD, SUM(r.DRP) AS DRP_SUM, b.STNM, b.STLC, b.ADMAUTH
    FROM RWDB.ST_PPTN_R r
    LEFT JOIN RWDB.ST_STBPRP_B b ON r.STCD = b.STCD
    WHERE r.TM >= SYSDATE - INTERVAL '1' HOUR
    AND b.FRGRD <> 5
    GROUP BY r.STCD, b.STNM, b.STLC, b.ADMAUTH
    ORDER BY SUM(r.DRP) DESC
)
WHERE ROWNUM <= 40;

在WHERE子句中添加了条件 AND b.FRGRD <> 5,过滤结果中的 ST_STBPRP_B 表的 FRGRD 字段不等于 5的数据

在where的条件判断中
<> 或 != 代表不等于,
所以添加 b.FRGRD <> 5 或者 b.FRGRD != 5
并且与上一条wnere条件使用 and 或者 or 符号链接

如有帮助给个采纳谢谢


SELECT *
FROM (
    SELECT r.STCD, SUM(r.DRP) AS DRP_SUM, b.STNM, b.STLC, b.ADMAUTH
    FROM RWDB.ST_PPTN_R r
    LEFT JOIN RWDB.ST_STBPRP_B b ON r.STCD = b.STCD
    WHERE r.TM >= SYSDATE - INTERVAL '1' HOUR
    AND b.FRGRD <> 5 -- 添加对FRGRD不等于5的条件判断
    GROUP BY r.STCD, b.STNM, b.STLC, b.ADMAUTH
    ORDER BY SUM(r.DRP) DESC
)
WHERE ROWNUM <= 40;

SELECT *
FROM (
    SELECT r.STCD, SUM(r.DRP) AS DRP_SUM, b.STNM, b.STLC, b.ADMAUTH
    FROM RWDB.ST_PPTN_R r
    LEFT JOIN RWDB.ST_STBPRP_B b ON r.STCD = b.STCD
    WHERE r.TM >= SYSDATE - INTERVAL '1' HOUR   AND b.FRGRD <> 5 
    GROUP BY r.STCD, b.STNM, b.STLC, b.ADMAUTH
    ORDER BY SUM(r.DRP) DESC
)
WHERE ROWNUM <= 40;


因为子查询是 左连接 LEFT JOIN,需要 在连接时添加过滤条件,而不是外层的 WHERE 条件中。


即 先过滤rwdb.st_stbprp_b,将b表的结果集缩小(减少I/O占用),再进行LEFT JOIN

SELECT *
  FROM (SELECT r.stcd, SUM(r.drp) AS drp_sum, b.stnm, b.stlc, b.admauth
          FROM rwdb.st_pptn_r r
          LEFT JOIN rwdb.st_stbprp_b b
            ON r.stcd = b.stcd
           AND b.frgrd <> 5  -- 因为是 左连接,需要添加在这里,而不是 Where 条件中
         WHERE r.tm >= SYSDATE - INTERVAL '1' hour
         GROUP BY r.stcd, b.stnm, b.stlc, b.admauth
         ORDER BY SUM(r.drp) DESC)
 WHERE rownum <= 40;

SELECT *
FROM (
    SELECT r.STCD, SUM(r.DRP) AS DRP_SUM, b.STNM, b.STLC, b.ADMAUTH
    FROM RWDB.ST_PPTN_R r
    LEFT JOIN RWDB.ST_STBPRP_B b ON r.STCD = b.STCD
    WHERE r.TM >= SYSDATE - INTERVAL '1' HOUR
    AND b.FRGRD <> 5 -- 添加判定条件
    GROUP BY r.STCD, b.STNM, b.STLC, b.ADMAUTH
    ORDER BY SUM(r.DRP) DESC
)
WHERE ROWNUM <= 40;

SELECT *
FROM (
    SELECT r.STCD, SUM(r.DRP) AS DRP_SUM, b.STNM, b.STLC, b.ADMAUTH
    FROM RWDB.ST_PPTN_R r
    LEFT JOIN RWDB.ST_STBPRP_B b ON r.STCD = b.STCD
    WHERE r.TM >= SYSDATE - INTERVAL '1' HOUR
    AND b.FRGRD <> 5 --添加的判定条件
    GROUP BY r.STCD, b.STNM, b.STLC, b.ADMAUTH
    ORDER BY SUM(r.DRP) DESC
)
WHERE ROWNUM <= 40;


SELECT *
FROM (
    SELECT r.STCD, SUM(r.DRP) AS DRP_SUM, b.STNM, b.STLC, b.ADMAUTH
    FROM RWDB.ST_PPTN_R r
    LEFT JOIN RWDB.ST_STBPRP_B b ON r.STCD = b.STCD
    WHERE r.TM >= SYSDATE - INTERVAL '1' HOUR
    GROUP BY r.STCD, b.STNM, b.STLC, b.ADMAUTH
    ORDER BY SUM(r.DRP) DESC
)
WHERE ROWNUM <= 40
  AND b.FRGRD <> 5;

您可以在原始的SQL语句中添加一个额外的条件来筛选ST_STBPRP_B表的FRGRD字段不等于5的记录。以下是修改后的SQL语句:

SELECT *
FROM (
    SELECT r.STCD, SUM(r.DRP) AS DRP_SUM, b.STNM, b.STLC, b.ADMAUTH
    FROM RWDB.ST_PPTN_R r
    LEFT JOIN RWDB.ST_STBPRP_B b ON r.STCD = b.STCD
    WHERE r.TM >= SYSDATE - INTERVAL '1' HOUR AND b.FRGRD <> 5
    GROUP BY r.STCD, b.STNM, b.STLC, b.ADMAUTH
    ORDER BY SUM(r.DRP) DESC
)
WHERE ROWNUM <= 40;

在上述修改后的SQL语句中,我们在WHERE子句中添加了b.FRGRD <> 5的条件,以确保只选择FRGRD字段不等于5的记录。这样就可以实现您所需的筛选条件。

请注意,根据您的具体需求,您可能需要调整条件的逻辑运算符或使用其他操作符(如NOT IN)来满足您的要求。请根据实际情况进行相应的修改。


SELECT *
FROM (
    SELECT r.STCD, SUM(r.DRP) AS DRP_SUM, b.STNM, b.STLC, b.ADMAUTH
    FROM RWDB.ST_PPTN_R r
    LEFT JOIN RWDB.ST_STBPRP_B b ON r.STCD = b.STCD
    WHERE r.TM >= SYSDATE - INTERVAL '1' HOUR and b.FRGRD !=5
    GROUP BY r.STCD, b.STNM, b.STLC, b.ADMAUTH
    ORDER BY SUM(r.DRP) DESC
)
WHERE ROWNUM <= 40;
 

SELECT *
FROM (
    SELECT r.STCD, SUM(r.DRP) AS DRP_SUM, b.STNM, b.STLC, b.ADMAUTH
    FROM RWDB.ST_PPTN_R r
    LEFT JOIN RWDB.ST_STBPRP_B b ON r.STCD = b.STCD
    WHERE r.TM >= SYSDATE - INTERVAL '1' HOUR
    AND b.FRGRD != 5
    GROUP BY r.STCD, b.STNM, b.STLC, b.ADMAUTH
    ORDER BY SUM(r.DRP) DESC
)
WHERE ROWNUM <= 40;

关联 ST_STBPRP _B 表的时候,加关联条件 and b.FRGRD <> 5 就可以了。

直接在关联表的那一层的where条件加上<>5

SELECT *
FROM (
    SELECT r.STCD, SUM(r.DRP) AS DRP_SUM, b.STNM, b.STLC, b.ADMAUTH
    FROM RWDB.ST_PPTN_R r
    LEFT JOIN RWDB.ST_STBPRP_B b ON r.STCD = b.STCD
    WHERE r.TM >= SYSDATE - INTERVAL '1' HOUR  and b.FRGRD<>5
    GROUP BY r.STCD, b.STNM, b.STLC, b.ADMAUTH
    ORDER BY SUM(r.DRP) DESC
)
WHERE ROWNUM <= 40;



SELECT *
FROM (
    SELECT r.STCD, SUM(r.DRP) AS DRP_SUM, b.STNM, b.STLC, b.ADMAUTH
    FROM RWDB.ST_PPTN_R r
    LEFT JOIN RWDB.ST_STBPRP_B b ON r.STCD = b.STCD
    WHERE r.TM >= SYSDATE - INTERVAL '1' HOUR
    AND b.FRGRD <> 5 -- 添加判定条件
    GROUP BY r.STCD, b.STNM, b.STLC, b.ADMAUTH
    ORDER BY SUM(r.DRP) DESC
)
WHERE ROWNUM <= 40;

如果以上回答对您有所帮助,点击一下采纳该答案~谢谢


SELECT * 
FROM ( 
    SELECT r.STCD, SUM(r.DRP) AS DRP_SUM, b.STNM, b.STLC, b.ADMAUTH 
    FROM RWDB.ST_PPTN_R r 
    LEFT JOIN RWDB.ST_STBPRP_B b ON r.STCD = b.STCD AND b.FRGRD != 5 
    WHERE r.TM >= SYSDATE - INTERVAL '1' HOUR 
    GROUP BY r.STCD, b.STNM, b.STLC, b.ADMAUTH 
    ORDER BY SUM(r.DRP) DESC 
) 
WHERE ROWNUM <= 40;

where条件中的不等于,可以使用<>或者!表示都可以,注意这个!是英文的感叹号,不是中文的。以下是修改后的Oracle语句:


SELECT *
FROM (
SELECT r.STCD, SUM(r.DRP) AS DRP_SUM, b.STNM, b.STLC, b.ADMAUTH
FROM RWDB.ST_PPTN_R r
LEFT JOIN RWDB.ST_STBPRP_B b ON r.STCD = b.STCD
WHERE r.TM >= SYSDATE - INTERVAL '1' HOUR
AND b.FRGRD <> 5 -- 添加对ST_STBPRP_B表的FRGRD字段不等于5的判定条件
GROUP BY r.STCD, b.STNM, b.STLC, b.ADMAUTH
ORDER BY SUM(r.DRP) DESC
)
WHERE ROWNUM <= 40;

基于new bing部分指引作答:
你可以在原始的Oracle语句中加入一个额外的条件来筛选ST_STBPRP_B表中FRGRD字段不等于5的记录。以下是修改后的SQL语句:

SELECT *
FROM (
    SELECT r.STCD, SUM(r.DRP) AS DRP_SUM, b.STNM, b.STLC, b.ADMAUTH
    FROM RWDB.ST_PPTN_R r
    LEFT JOIN RWDB.ST_STBPRP_B b ON r.STCD = b.STCD
    WHERE r.TM >= SYSDATE - INTERVAL '1' HOUR
    GROUP BY r.STCD, b.STNM, b.STLC, b.ADMAUTH
    ORDER BY SUM(r.DRP) DESC
)
WHERE ROWNUM <= 40
AND b.FRGRD <> 5;

在上述查询中,我添加了一个额外的条件 AND b.FRGRD <> 5,它会排除ST_STBPRP_B表中FRGRD字段等于5的记录。这样修改后的查询结果将只包含FRGRD字段不等于5的记录,并且仍然返回最多40行结果。请确保表名和字段名与你的数据库结构相匹配,如果不匹配,请相应地修改它们。

源于chatGPT仅供参考

要在给定的Oracle语句中添加一个判定条件,确保ST_STBPRP_B表的FRGRD字段不等于5,可以使用以下方式修改查询:

```sql
SELECT *
FROM (
    SELECT r.STCD, SUM(r.DRP) AS DRP_SUM, b.STNM, b.STLC, b.ADMAUTH
    FROM RWDB.ST_PPTN_R r
    LEFT JOIN RWDB.ST_STBPRP_B b ON r.STCD = b.STCD
    WHERE r.TM >= SYSDATE - INTERVAL '1' HOUR
    AND b.FRGRD != 5 -- 添加此条件以排除FRGRD字段等于5的记录
    GROUP BY r.STCD, b.STNM, b.STLC, b.ADMAUTH
    ORDER BY SUM(r.DRP) DESC
)
WHERE ROWNUM <= 40;

在原始查询的WHERE子句中添加了AND b.FRGRD != 5的条件来限制ST_STBPRP_B表的FRGRD字段不等于5。这将过滤掉具有FRGRD字段值为5的记录,并且仅返回满足其他条件的结果。

请注意,此处假设FRGRD字段是ST_STBPRP_B表的字段名称,并且其数据类型适合与!=操作符一起使用。请根据您的实际情况进行相应调整。

```