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表的字段名称,并且其数据类型适合与!=操作符一起使用。请根据您的实际情况进行相应调整。
```