CASE表达式可以在下列SELECT-SQL的哪些子句中使用:SELECT;WHERE;GROUP BY;ORDER BY

时间: 2024-04-01 17:35:52 浏览: 24
CASE表达式可以在下列SELECT-SQL的子句中使用: 1. SELECT:CASE表达式可以作为SELECT语句中的一部分,用于计算和返回新的列值。例如,可以使用CASE表达式将一个列的值映射为不同的结果,或者根据不同的条件计算出不同的值。 2. WHERE:CASE表达式可以作为WHERE语句中的一部分,用于限制返回的行。例如,可以使用CASE表达式过滤出满足特定条件的行,或者根据不同的条件返回不同的WHERE子句。 3. GROUP BY:CASE表达式可以作为GROUP BY语句中的一部分,用于对结果集进行分组。例如,可以使用CASE表达式将结果集分为不同的组,或者根据不同的条件进行分组。 4. ORDER BY:CASE表达式可以作为ORDER BY语句中的一部分,用于对结果集进行排序。例如,可以使用CASE表达式对结果集按照不同的条件进行排序,或者对结果集按照不同的列进行排序。 综上所述,CASE表达式可以在SELECT、WHERE、GROUP BY、ORDER BY等SQL语句中使用,用于对结果集进行计算、过滤、分组和排序等操作。
相关问题

SQL中CASE WHEN和GROUP BY执行顺序

在SQL中,执行顺序是先执行FROM子句中的表,然后执行WHERE子句的筛选,接着执行GROUP BY分组,然后执行SELECT子句中的表达式和函数,最后执行ORDER BY排序。 在此基础上,CASE WHEN语句的执行顺序是在SELECT子句之后,但在ORDER BY之前。也就是说,CASE WHEN语句可以用于SELECT子句中的表达式和函数,但它们不会影响GROUP BY分组。 因此,如果您想在GROUP BY分组之前使用CASE WHEN语句进行筛选或计算,可以使用子查询或通用表表达式(CTE)来实现。

SELECT SUM( CASE WHEN A.RUNLONGTIME IS NULL THEN 0 ELSE TO_NUMBER( A.RUNLONGTIME ) END ) AS 运行时间, SUM( CASE WHEN A.TOTALTIME IS NULL THEN 0 ELSE 12 END ) AS 总时间, CONCAT( CONCAT( B.SUPUSER_ID, ':' ), B.SUPUSER_NAME ) AS 技术员, ROUND(( SUM( CASE WHEN A.RUNLONGTIME IS NULL THEN 0 ELSE TO_NUMBER( A.RUNLONGTIME ) END ) / SUM( CASE WHEN A.TOTALTIME IS NULL THEN 0 ELSE 12 END )), 4 ) * 100 oee , '2023-06-26 08:00:00' AS 开始时间, '2023-06-27 08:00:00' AS 结束时间, ( CASE C.PROCESS WHEN '3' THEN '焊线A区' WHEN '5' THEN '焊线B区' WHEN '7' THEN '焊线C区' END ) AS 区域 FROM RPT_EQP_STATETIME A LEFT JOIN BAS_USEREQP_CONFIG B ON A.EQP_ID = B.EQP_ID AND A.CREATED_TIME = B.END_TIME LEFT JOIN BAS_EQP_EQUIPMENT C ON A.EQP_ID = C.EQP_ID WHERE A.EQP_ID LIKE 'WB%' AND A.CREATED_TIME > to_date( '2023-06-16 08:00:00', 'yyyy-MM-dd hh24:mi:ss' ) AND A.CREATED_TIME <= to_date( '2023-06-26 20:00:00', 'yyyy-MM-dd hh24:mi:ss' ) AND B.START_TIME >= TO_DATE( '2023-06-16 08:00:00', 'YYYY-MM-DD HH24:MI:SS' ) AND B.END_TIME <= TO_DATE( '2023-06-26 20:00:00', 'YYYY-MM-DD HH24:MI:SS' ) AND A.CREATED_TIME = B.END_TIME GROUP BY B.SUPUSER_ID, B.SUPUSER_NAME, C.PROCESS ORDER BY OEE DESC

这是一个复杂的SELECT语句,它使用了多个表的JOIN和聚合函数来生成结果集。以下是对该语句的解释: ```sql SELECT SUM( CASE WHEN A.RUNLONGTIME IS NULL THEN 0 ELSE TO_NUMBER( A.RUNLONGTIME ) END ) AS 运行时间, SUM( CASE WHEN A.TOTALTIME IS NULL THEN 0 ELSE 12 END ) AS 总时间, CONCAT( CONCAT( B.SUPUSER_ID, ':' ), B.SUPUSER_NAME ) AS 技术员, ROUND(( SUM( CASE WHEN A.RUNLONGTIME IS NULL THEN 0 ELSE TO_NUMBER( A.RUNLONGTIME ) END ) / SUM( CASE WHEN A.TOTALTIME IS NULL THEN 0 ELSE 12 END )), 4 ) * 100 oee , '2023-06-26 08:00:00' AS 开始时间, '2023-06-27 08:00:00' AS 结束时间, ( CASE C.PROCESS WHEN '3' THEN '焊线A区' WHEN '5' THEN '焊线B区' WHEN '7' THEN '焊线C区' END ) AS 区域 FROM RPT_EQP_STATETIME A LEFT JOIN BAS_USEREQP_CONFIG B ON A.EQP_ID = B.EQP_ID AND A.CREATED_TIME = B.END_TIME LEFT JOIN BAS_EQP_EQUIPMENT C ON A.EQP_ID = C.EQP_ID WHERE A.EQP_ID LIKE 'WB%' AND A.CREATED_TIME > to_date( '2023-06-16 08:00:00', 'yyyy-MM-dd hh24:mi:ss' ) AND A.CREATED_TIME <= to_date( '2023-06-26 20:00:00', 'yyyy-MM-dd hh24:mi:ss' ) AND B.START_TIME >= TO_DATE( '2023-06-16 08:00:00', 'YYYY-MM-DD HH24:MI:SS' ) AND B.END_TIME <= TO_DATE( '2023-06-26 20:00:00', 'YYYY-MM-DD HH24:MI:SS' ) AND A.CREATED_TIME = B.END_TIME GROUP BY B.SUPUSER_ID, B.SUPUSER_NAME, C.PROCESS ORDER BY OEE DESC ``` 这个查询语句从表RPT_EQP_STATETIME(A)、BAS_USEREQP_CONFIG(B)和BAS_EQP_EQUIPMENT(C)中检索数据。它使用了LEFT JOIN关键字将这些表连接起来。 查询的目的是计算运行时间、总时间、技术员、OEE指数、开始时间、结束时间和区域。其中,运行时间和总时间是通过SUM函数和CASE表达式计算得出的。技术员是通过CONCAT函数将SUPUSER_ID和SUPUSER_NAME拼接而成的。OEE指数是通过运行时间除以总时间,并乘以100计算得出的。 查询还包括了一些筛选条件,例如EQP_ID的模糊匹配,CREATED_TIME的范围限制等。 最后,查询使用GROUP BY子句对SUPUSER_ID、SUPUSER_NAME和PROCESS进行分组,并使用ORDER BY子句按OEE指数降序排序结果集。

相关推荐

优化SQL select round( ohbmc.after_actual_amount/zz,0) cost_moneyi ,count(distinct case when ddp.orig_plan_rid = -1 then null else ddp.orig_plan_rid end) AS orig_num ,array_agg (dlt.state) AS loading_state ,count(DISTINCT CASE WHEN ddp.sale_planid = -1 THEN NULL ELSE ddp.sale_planid END) AS saleid_num--销地已计划数量 ,array_agg(dto.state) AS saletransport_state from ( SELECT id AS origin_planid , unnest(cabinet_rule_id) cabinet_rule_id -- 判断 next_plan_id 本身是空和 next_plan_id 为 {} ,unnest(case when (next_plan_id is null or next_plan_id[1] is null) then ARRAY[-1]::integer[] else next_plan_id end) as sale_planid --销地计划 , case when dp.plan_receiver_id is null then -1 else dp.plan_receiver_id end orig_plan_rid --产地计划 FROM ods.ods_durian_delivery_plan as dp left join ods.ods_hl_commodity_category as hcc on hcc.category_id = dp.category_id WHERE dp.type = 'ORIGIN' AND dp.deleted = 99 AND dp.tenant_id = 1 and cabinet_rule_id='{8}'or cabinet_rule_id='{9}'or cabinet_rule_id='{10000005}'---取白心火龙果 AND hcc.category_name = '火龙果') as ddp LEFT JOIN ods.ods_durian_loading_task AS dlt ON dlt.plan_id = ddp.origin_planid and dlt.plan_type='ORIGIN' AND dlt.deleted = 99 LEFT JOIN ods.ods_durian_transport_order AS dto ON dto.plan_id = ddp.sale_planid AND dto.deleted = 99 LEFT JOIN ods.ods_durian_receipt_task AS drt ON drt.plan_id = ddp.sale_planid AND drt.deleted = 99 LEFT JOIN ods.ods_durian_transport_order AS dto1 ON dto1.plan_id = ddp.sale_planid AND dto1.sort_no = 1 AND dto1.deleted = 99 left join (select odlsi.plan_id,sum(odlsi.quantity) zz from ods.ods_durian_loading_sku_item odlsi group by 1) odlsi on odlsi.plan_id=dlt.plan_id left join (select *, unnest(case when ( odbr.bill_main_id is null or odbr.bill_main_id is null) then ARRAY[-1]::integer[] else odbr.bill_main_id end) bill_main_id_r from ods.ods_durian_bill_rel odbr) odbr on odbr.data_id= dlt.plan_id and odbr.data_type='ORIGIN_FEE' left join ods.ods_hl_bill_main_currency ohbmc on ohbmc.bill_main_id=odbr.bill_main_id_r and ohbmc.deleted=99 group by 1;

优化这个sql SELECT count( 1 ) FROM ( SELECT B.ID, B.PURCHASE_REQUEST_ID, B.MATERIAL_ID, B.MATERIAL_CODE, B.MATERIAL_NAME, B.STANDARD, B.MODEL_ID, B.BILL_ROW_ID, B.BILL_NO, BILL_NAME, B.MODEL_CODE, B.MODEL_NAME, B.PARENT_MODEL_ID, B.PARENT_MODEL_CODE, B.PARENT_MODEL_NAME, B.UNIT_CODE, B.UNIT_NAME, B.PURCHASE_TYPE_CODE, CAST( NVL( B.APPLY_NUM, 0 ) AS NUMBER ( 24, 10 ) ) AS APPLY_NUM, CAST( NVL( B.DEAL_NUM, 0 ) AS NUMBER ( 24, 10 ) ) AS DEAL_NUM, CAST( NVL( B.RETURN_NUM, 0 ) AS NUMBER ( 24, 10 ) ) AS RETURN_NUM, B.DEAL_USER_ID, B.DEAL_USER_NAME, CAST( NVL( B.PRICE, 0 ) AS NUMBER ( 24, 10 ) ) AS PRICE, CAST( NVL( B.AMOUNT, 0 ) AS NUMBER ( 24, 10 ) ) AMOUNT, B.IMPLEMENT_CODE, B.IMPLEMENT_NAME, B.IMPLEMENT_INVEST_AMOUNT, B.PURCHASE_MANAGER_ID, B.PURCHASE_MANAGER_NAME, B.PROVIDER_ID, B.PROVIDER_NAME, B.REMARK, B.DELIVER_AREA, B.DELIVER_ADDRESS, B.RECEIVE_PEOPLE, B.RECEIVE_PEOPLE_PHONE, B.ITEM_STATUS, B.COST_CENTER, B.COST_BUDGET_CODE, B.COST_IMPLEMENT_NAME, B.FRAME_CONT_ID, B.FRAME_CONT_CODE, B.FRAME_CONT_NAME, B.DETAIL_CONFIG, B.PURCHASE_CATEGORY_CODE, B.INVOICE_TITLE_CODE, B.INVOICE_SEND_ADDRRSS, B.MATERIAL_REQUEST_ITEM_ID, B.YEAR, B.DELETE_FLAG, B.PROVINCE_CODE, B.REASON, B.PARENT_ITEM_ID, B.FRAME_CONT_ITEM_ID, B.SUB_MATERIAL_REQUEST_ID, B.SUB_MATERIAL_REQUEST_CODE, B.MATERIAL_URL, B.RECOMMEND_PROVIDER_NAMES, C.PURCHASE_REQUEST_CODE, C.PURCHASE_REQUEST_NAME, C.APPLY_TYPE_CODE, C.CREATOR_NAME, C.APPLY_TELEPHONE, C.COMPANY_NAME, C.DEPT_NAME, B.CREATE_TIME, TO_CHAR( B.CREATE_TIME, 'YYYY-MM-DD' ) CREATE_TIME_STR, C.ARRIVE_TIME, C.IS_TO_END, C.MONEY_WAY_CODE, C.OWN, C.APPLY_CATEGORY_CODE, C.manu_Type, C.BILL_ID, MMD.MATERIAL_TYPE_CODE, B.BRANCH_COMPANY_DEAL_USER_ID, B.BRANCH_COMPANY_DEAL_USER_NAME, ( SELECT ORG_NAME FROM ORGANIZATIONS WHERE DELETE_FLAG = '0' AND ORG_CODE = ( SELECT PARENT_COMPANY_NO FROM ORGANIZATIONS WHERE ID = B.MATERIAL_DEPT_ID )) AS MATERIAL_COMPANY_NAME, B.ORIGINAL, B.PROVIDER_PRODUCT_MODEL, B.PROVIDER_PRODUCT_NAME, B.PRODUCT_DESC, B.Back_Flag, CASE WHEN MMD.material_type_code = 'WZ' THEN '1' WHEN MMD.material_type_code = 'FW' THEN '2' ELSE '3' END apply_category_code_item, NVL( C.IS_CARDSYSTEM_REQUEST, '0' ) IS_CARDSYSTEM_REQUEST, B.APPLY_GROUP_AUTHORITES, B.SCIENTIFIC_RESEARCH_ID, B.SCIENTIFIC_RESEARCH_CODE, B.SCIENTIFIC_RESEARCH_NAME, B.PREQUALFY_CODE, nvl( C.IS_QUICK, '0' ) AS IS_QUICK, C.PURCHASE_WAY_CODE, C.PURCHASE_TYPE_CODE PURCHASE_TYPE_CODE_P, C.ORIGINAL_TYPE, C.PURCHASE_REQUEST_BILLS_TYPE, B.IS_FRAME_CONT_MONAD FROM PURCHASE_REQUEST_ITEM B LEFT JOIN PURCHASE_REQUEST C ON B.PURCHASE_REQUEST_ID = C.ID LEFT JOIN MATERIAL_DATA MMD ON MMD.ID = B.MATERIAL_ID AND MMD.DELETE_FLAG = '0' WHERE B.delete_flag = '0' AND B.Item_Status IN ( 1 ) AND NOT EXISTS ( SELECT * FROM purchase_request_item_log pril WHERE B.id = pril.purchase_request_item_id AND pril.lock_status = '1' AND pril.delete_flag = '0' ) AND ( ( c.apply_type_code NOT IN ( '20', '41', '3' ) AND nvl( B.Apply_Num, 0 ) > nvl( B.Deal_Num, 0 )) OR c.apply_type_code IN ( '20', '41', '3' ) ) AND B.Deal_User_Id =: 1 AND C.MONEY_WAY_CODE =: 2 AND C.APPLY_TYPE_CODE =: 3 AND C.PAY_OUT_TYPE_CODE =: 4 AND C.APPLY_CATEGORY_CODE =: 5 AND NVL( C.IS_CARDSYSTEM_REQUEST, '0' ) = : 6 AND NOT EXISTS ( SELECT * FROM purchase_request_item p left join material_province mp ON p.material_id = mp.material_id WHERE p.delete_flag = 0 AND mp.delete_flag = 0 AND mp.material_status = 03 AND mp.org_code = p.province_code AND p.id = B.id ) ORDER BY C.ID, B.ID ASC)

最新推荐

recommend-type

mysql中count(), group by, order by使用详解

mysql中order by 排序查询、asc升序、desc降序,group by 分组查询、having 只能用于group by子句、作用于组内,having条件子句可以直接跟函数表达式。使用group by 子句的查询语句需要使用聚合函数。
recommend-type

Oracle中分组查询group by用法规则详解

在select 语句中可以使用group by 子句将行划分成较小的组,一旦使用分组后select操作的对象变为各个分组后的数据,使用聚组函数返回的是每一个组的汇总信息。 使用having子句 限制返回的结果集。group by 子句可以...
recommend-type

mysql中group by与having合用注意事项分享

group by函数应该的使用应该是SELECT 列表中指定的每一列也必须出现在 GROUP BY 子句中,除非这列是用于聚合函数,但是今天帮同事调试一个mysql中的group by函数,让我大跌眼镜,当时感觉不可思议,然后回来做了个...
recommend-type

为什么SQL不许在视图定义ORDER BY子句

SQL Server之所以不允许在视图定义中使用ORDER BY子句是为了遵守ANSI SQL-92标准。因为对该标准的原理分析需要对结构化查询语言(SQL)的底层结构和它所基于的数学理论进行讨论,我们不能在这里对它进行充分的解释。...
recommend-type

Sequelize中用group by进行分组聚合查询

GROUP BY子句要和聚合函数配合使用才能完成分组查询,在SELECT查询的字段中,如果没有使用聚合函数就必须出现在ORDER BY子句中。分组查询后,查询结果为一个或多个列分组后的结果集。 GROUP BY语法 SELECT 列名, ...
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

用Spring boot和vue写一个登录注册界面

好的,这是一个比较常见的技术问题,我可以为您提供一些参考资料和思路。首先,您可以使用Spring Boot作为后端框架来处理用户认证和注册的逻辑,比如使用Spring Security实现用户登录认证。同时,您还需要设计相应的数据模型和数据库表结构来存储用户信息。在前端方面,您可以使用Vue.js作为框架来构建登录注册页面,使用Axios来发起API请求并和后端进行交互。当然,在实现过程中,还需要考虑一些具体细节,比如数据校验、安全性和用户体验等方面。希望这些信息能够帮助到您。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。