学习SQL日记(八)--ORACLE CASE WHEN

Ⅰ. ORACLE  WHERE 字句里面使用CASE WHEN 25行

Ⅱ.  嵌套使用 CASE WHEN  2~13行

 1 SELECT
 2        SUM(CASE WHEN M.MV_AVG < 800 AND C.THICKNESS >= 0.5  AND C.THICKNESS <= 0.9  THEN  (CASE WHEN D.MV_AVG = 0 OR D.MV_AVG IS NULL THEN 0 ELSE P.LENGTH / D.MV_AVG END ) END ) R1CD ,--1区间内长度/炉区速度
 3        SUM(CASE WHEN M.MV_AVG < 800 AND C.THICKNESS > 0.9  AND C.THICKNESS <= 1.3  THEN  (CASE WHEN D.MV_AVG = 0 OR D.MV_AVG IS NULL THEN 0 ELSE P.LENGTH / D.MV_AVG END) END ) R2CD ,--2区间内长度/炉区速度
 4        SUM(CASE WHEN M.MV_AVG < 800 AND C.THICKNESS > 1.3  AND C.THICKNESS <= 1.6  THEN  (CASE WHEN D.MV_AVG = 0 OR D.MV_AVG IS NULL THEN 0 ELSE P.LENGTH / D.MV_AVG END) END ) R3CD ,--3区间内长度/炉区速度
 5        SUM(CASE WHEN M.MV_AVG < 800 AND C.THICKNESS > 1.6  THEN  (CASE WHEN D.MV_AVG = 0 OR D.MV_AVG IS NULL THEN 0 ELSE P.LENGTH / D.MV_AVG END) END ) R4CD ,   --4区间内长度/炉区速度
 6        SUM(CASE WHEN M.MV_AVG >= 800 AND M.MV_AVG < 830 AND C.THICKNESS >= 0.5  AND C.THICKNESS <= 0.9  THEN   (CASE WHEN D.MV_AVG = 0 OR D.MV_AVG IS NULL THEN 0 ELSE P.LENGTH / D.MV_AVG END) END ) R5CD ,--5区间内长度/炉区速度
 7        SUM(CASE WHEN M.MV_AVG >= 800 AND M.MV_AVG < 830 AND C.THICKNESS > 0.9  AND C.THICKNESS <= 1.3  THEN  (CASE WHEN D.MV_AVG = 0 OR D.MV_AVG IS NULL THEN 0 ELSE P.LENGTH / D.MV_AVG END) END ) R6CD ,--6区间内长度/炉区速度
 8        SUM(CASE WHEN M.MV_AVG >= 800 AND M.MV_AVG < 830 AND C.THICKNESS > 1.3  AND C.THICKNESS <= 1.6  THEN  (CASE WHEN D.MV_AVG = 0 OR D.MV_AVG IS NULL THEN 0 ELSE P.LENGTH / D.MV_AVG END) END ) R7CD ,--7区间内长度/炉区速度
 9        SUM(CASE WHEN M.MV_AVG >= 800 AND M.MV_AVG < 830 AND C.THICKNESS > 1.6  THEN (CASE WHEN D.MV_AVG = 0 OR D.MV_AVG IS NULL THEN 0 ELSE P.LENGTH / D.MV_AVG END) END ) R8CD ,   --8区间内长度/炉区速度
10        SUM(CASE WHEN M.MV_AVG >= 830 AND C.THICKNESS >= 0.5  AND C.THICKNESS <= 0.9  THEN  (CASE WHEN D.MV_AVG = 0 OR D.MV_AVG IS NULL THEN 0 ELSE P.LENGTH / D.MV_AVG END) END ) R9CD ,--9区间内长度/炉区速度
11        SUM(CASE WHEN M.MV_AVG >= 830 AND C.THICKNESS > 0.9  AND C.THICKNESS <= 1.3  THEN  (CASE WHEN D.MV_AVG = 0 OR D.MV_AVG IS NULL THEN 0 ELSE P.LENGTH / D.MV_AVG END) END ) R10CD ,--10区间内长度/炉区速度
12        SUM(CASE WHEN M.MV_AVG >= 830 AND C.THICKNESS > 1.3  AND C.THICKNESS <= 1.6  THEN   (CASE WHEN D.MV_AVG = 0 OR D.MV_AVG IS NULL THEN 0 ELSE P.LENGTH / D.MV_AVG END) END ) R11CD ,--11区间内长度/炉区速度
13        SUM(CASE WHEN M.MV_AVG >= 830 AND C.THICKNESS > 1.6  THEN  (CASE WHEN D.MV_AVG = 0 OR D.MV_AVG IS NULL THEN 0 ELSE P.LENGTH / D.MV_AVG END) END ) R12CD    --12区间内长度/炉区速度
14  FROM PRODCOIL_MV M , (SELECT M.PCOIL_SID , M.MV_AVG   FROM PRODCOIL_MV M  WHERE M.QDR_CHAN = 1  AND  M.PRODUCT_LINE = ‘CGL1‘) D ,PRODCOILS P ,COILS  C  ,PRODCOILS_SOURCES S
15 WHERE M.PCOIL_SID = P.PCOIL_SID
16   AND P.PCOIL_SID = S.PCOIL_SID
17   AND S.COIL_SID = C.COIL_SID
18   AND M.PCOIL_SID = D.PCOIL_SID
19   AND P.DUMMY_COIL = 0
20   AND M.PRODUCT_LINE = ‘CGL1‘
21   AND P.PRODUCT_LINE = ‘CGL1‘
22   AND C.PRODUCT_LINE = ‘CGL1‘
23   AND S.PRODUCT_LINE = ‘CGL1‘
24
25   AND M.QDR_CHAN = (CASE WHEN ‘CGL1‘ = ‘CGL1‘ THEN 521 ELSE 531 END )
26   AND P.PROD_DAY  BETWEEN TO_DATE(‘2014-12-01‘,‘YYYY-MM-DD‘) AND TO_DATE(‘2014-12-31‘,‘YYYY-MM-DD‘)
时间: 2024-10-14 13:57:54

学习SQL日记(八)--ORACLE CASE WHEN的相关文章

学习SQL日记(一)

写一下总结吧 总是学了就忘. 11.01 重新学习SQL -------Oracle #1. column format 通过使用COLUMN命令  可以控制查询结果集中列的显示格式. 语法格式:column[column_name  alias option] column_name参数用于指定将要控制的列的名称 alias 参数用于指定列的别名 option参数用于指定某个列的显示格式 option选项的部分取值及意义 clear 清除为该列设置的显示属性,使其使用默认的显示属性 color

学习SQL日记(九)--ORACLE 创建函数

Ⅰ.创建函数 Ⅱ.截取字符串函数 : REGEXP_SUBSTR 1 CREATE OR REPLACE FUNCTION GET_NUM(GALV_COOT VARCHAR2) RETURN NUMBER IS 2 RESULT NUMBER; 3 BEGIN 4 RESULT := TO_NUMBER(REGEXP_SUBSTR(GALV_COOT , '\d{2,3}')); --取字符串里最少两位 最多三位 的数字 5 IF RESULT IS NULL 6 THEN RETURN 0

学习SQL日记(二)

#1. 查询语句中使用函数 @1. round(d1,d2)  用于数字的四舍五入 d1表示数字 d2表示小数点后的位数 (d2不写 默认为零) @2. trunc(d1,d2) 截取  去尾法 @3. 日期函数 sysdate select sysdate from dual; ----获取系统当前时间 @4. 日期数据相减,得到两个日期之间的天数差 不足一天用小数表示 @5.months_between(d1,d2)  得到d1 ,d2两个日期数据之间所差的月份 小数表示 @6.计算d2个月

学习SQL日记(五)

①where 子句里面根据传入参数 决定使用哪一个条件 SQL> select 1 from dual where decode(1,1,1,0)=1; SQL> select 1 from dual where (case when 1=1 then 1 else 0 end) = 1;

学习SQL日记(六)

①ORACLE 层次查询 --(递归语句)--(查询树状结构) select × from  table start with table.col1 = '001' --根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树. onnect by proir col1 = parent_id   ---上一条语句中的col1 = 本条记录的parent_id 扫描树结构表时,需要依此访问树结构的每个节点,一个节点只能访问一次,其访问的步骤如下:      第一步:从根节点开始:

学习SQL日记(七)

Ⅰ.在存储过程中使用游标 ①声明游标 CURSOR CUR_EMP IS SELECT * FROM EMP ; ②打开游标 ③循环取数 ④设置退出条件 ⑤关闭循环 ⑥关闭游标 CREATE OR REPLACE PROCEDURE PRO_EMP_TEST IS EMP_T EMP%ROWTYPE; CURSOR CUR_EMP IS SELECT * FROM EMP ; BEGIN OPEN CUR_EMP; LOOP FETCH CUR_EMP INTO EMP_T ; EXIT WHE

学习SQL日记(三)

#1. 系统日期 .时间函数 ^1.SELECT TO_CHAR (SYSDATE ,'YYYY-MM-DD HH24:MI:SS') FROM DUAL -- 查询系统当前日期 ^2.SELECT SYSTIMESTAMP FROM DUAL --查询带时区的系统日期 ^3.SELECT DBTIMEZONE FROM DUAL --查询当前时区 SELECT SESSIONTIMEZONE FROM DUAL--查询当前会话的时区 ^4.SELECT TO_CHAR(ADD_MONTHS(T

学习SQL日记(四)

问题① PRODCOILS表里有10000条数据 左连接 另一个表 temp (40000条数据) 得出结果40000条数据  不用想了 40000条里有大量重复数据 为什么有 重复数据  :temp 是 查询结果集  coils 表 连接 steel_grade 用的不是主键 - -! 造成数据重复  使用distinct就能解决

数据库学习之一: 在 Oracle sql developer上运行SQL必知必会脚本

1 首先在开始菜单中打开sql developer: 2. 创建数据库连接 点击左上角的加号 在弹出的对话框中填写用户名和密码 测试如果成功则点击连接,记得角色要写SYSDBA 3. 运行脚本 之后把SQL必知必会的脚本拷到工作表中并点击运行脚本 首先进行表的创建 输入代码: --------------------------------------------- -- Sams Teach Yourself SQL in 10 Minutes -- http://www.forta.com/