[英]if statement in SQL to calculate age
I am very new at SQL and I have been working on my First Query. 我是SQL的新手,我一直在研究First Query。 Now I need your help.
现在,我需要您的帮助。 I have this report in Excel.
我在Excel中有此报告。 I have formula in the AGE column N calculating the AGE.
我在AGE列N中有计算年龄的公式。 I have been trying to create a SQL query to come up with the same answer.
我一直在尝试创建一个SQL查询以得出相同的答案。 So far I have figured out the columns that I need and pulled all the data to Match Excel.
到目前为止,我已经找到了所需的列,并提取了所有数据以匹配Excel。 Only thing is I don't know how and where to enter this IF statement so it will calculate the age when i run the query.
唯一的事情是我不知道如何以及在哪里输入此IF语句,因此它将在我运行查询时计算年龄。
Work Order Location MISC Status Actual Finish Finish Time Parent WO Work Type N Reported Date Reported Time Site Gen Age Sub Name Substation Location
1234567899 4074 COMP 11/5/14 3:08:49 PM CM 10/7/14 1:47:42 PM 29.05633102
12348574987 2946 SCHED CM 10/30/14 10:28:03 AM 188.5638542
AGE is a formula, pasted below: AGE是一个公式,粘贴在下面:
=IF ((IF(Status<>"Comp",Today()-Reported date, actual finish-reported date))<0,0, IF(STATUS<>"COMP", TODAY()-REPORTED DATE, ACTUAL FINISH-REPORTED DATE))
SQL Writen Query SQL写查询
SELECT WO.WONUM,
LOCOFFDESC.DESCRIPTION AS OFFICE,
WO.STATUS,
WO.LOCATION,
CASE
WHEN ((INSTR(LOCOFF.EXT_LOC_HIERARCHY_PATH, '/', 2, 3)) = 0)
THEN SUBSTR(LOCOFF.EXT_LOC_HIERARCHY_PATH, ((INSTR(LOCOFF.EXT_LOC_HIERARCHY_PATH, '/', 1, 2) + 2)), LENGTH(LOCOFF.EXT_LOC_HIERARCHY_PATH))
WHEN ((INSTR(LOCOFF.EXT_LOC_HIERARCHY_PATH, '/', 2, 3)) IS NOT NULL)
THEN SUBSTR(LOCOFF.EXT_LOC_HIERARCHY_PATH, ((INSTR(LOCOFF.EXT_LOC_HIERARCHY_PATH, '/', 1, 2) + 2)), (INSTR(LOCOFF.EXT_LOC_HIERARCHY_PATH, '/', 2, 3)) - (INSTR(LOCOFF.EXT_LOC_HIERARCHY_PATH, '/', 1, 2) + 2))
END AS "SUBSTATION CASE",
WO.PARENT,
WO.WORKTYPE,
WO.REPORTEDBY,
WO.REPORTDATE,
WO.ACTFINISH,
WO.SITEID
FROM LOCATIONS LOCOFF
RIGHT JOIN MAXPRD.WORKORDER WO
ON WO.LOCATION = LOCOFF.LOCATION
INNER JOIN MAXPRD.LOCANCESTOR LOCOFFANC
ON LOCOFFANC.LOCATION = LOCOFF.LOCATION
INNER JOIN MAXPRD.LOCATIONS LOCOFFDESC
ON LOCOFFANC.ANCESTOR = LOCOFFDESC.LOCATION
INNER JOIN MAXPRD.LOCHIERARCHY LOCOFFHIER
ON LOCOFFANC.ANCESTOR = LOCOFFHIER.LOCATION
WHERE LOCOFF.SITEID = 'SUB'
AND LOCOFFHIER.PARENT = '2000'
GROUP BY WO.WONUM,
LOCOFFDESC.DESCRIPTION,
WO.STATUS,
WO.LOCATION,
LOCOFF.EXT_LOC_HIERARCHY_PATH,
LOCOFF.SITEID,
LOCOFFHIER.PARENT,
WO.PARENT,
WO.WORKTYPE,
WO.REPORTEDBY,
WO.REPORTDATE,
WO.ACTFINISH,
WO.SITEID
You place the calculation after the SELECT statement, before the FROM statement, so you have a column filled with calculated values, similar to excel. 您将计算放在SELECT语句之后,在FROM语句之前,这样一列就充满了计算值,类似于excel。
We need to know what database system you are working with to get the exact syntax. 我们需要知道您正在使用哪个数据库系统来获取确切的语法。 Can you try after WO.SITEID,
您可以尝试使用WO.SITEID,
SELECT WO.WONUM,
LOCOFFDESC.DESCRIPTION AS OFFICE,
WO.STATUS,
WO.LOCATION,
CASE
WHEN ((INSTR(LOCOFF.EXT_LOC_HIERARCHY_PATH, '/', 2, 3)) = 0)
THEN SUBSTR(LOCOFF.EXT_LOC_HIERARCHY_PATH, ((INSTR(LOCOFF.EXT_LOC_HIERARCHY_PATH, '/', 1, 2) + 2)), LENGTH(LOCOFF.EXT_LOC_HIERARCHY_PATH))
WHEN ((INSTR(LOCOFF.EXT_LOC_HIERARCHY_PATH, '/', 2, 3)) IS NOT NULL)
THEN SUBSTR(LOCOFF.EXT_LOC_HIERARCHY_PATH, ((INSTR(LOCOFF.EXT_LOC_HIERARCHY_PATH, '/', 1, 2) + 2)), (INSTR(LOCOFF.EXT_LOC_HIERARCHY_PATH, '/', 2, 3)) - (INSTR(LOCOFF.EXT_LOC_HIERARCHY_PATH, '/', 1, 2) + 2))
END AS "SUBSTATION CASE",
WO.PARENT,
WO.WORKTYPE,
WO.REPORTEDBY,
WO.REPORTDATE,
WO.ACTFINISH,
WO.SITEID,
(
CASE
WHEN (
CASE WHEN WO.STATUS != 'Comp'
THEN SYSDATE-WO.REPORTDATE
ELSE WO.ACTFINISH-WO.REPORTDATE
END) < 0
THEN 0
ELSE
CASE WHEN STATUS != 'COMP'
THEN SYSDATE-WO.REPORTDATE
ELSE WO.ACTFINISH-WO.REPORTDATE
END
END) as age
FROM LOCATIONS LOCOFF
RIGHT JOIN MAXPRD.WORKORDER WO
ON WO.LOCATION = LOCOFF.LOCATION
INNER JOIN MAXPRD.LOCANCESTOR LOCOFFANC
ON LOCOFFANC.LOCATION = LOCOFF.LOCATION
INNER JOIN MAXPRD.LOCATIONS LOCOFFDESC
ON LOCOFFANC.ANCESTOR = LOCOFFDESC.LOCATION
INNER JOIN MAXPRD.LOCHIERARCHY LOCOFFHIER
ON LOCOFFANC.ANCESTOR = LOCOFFHIER.LOCATION
WHERE LOCOFF.SITEID = 'SUB'
AND LOCOFFHIER.PARENT = '2000'
GROUP BY WO.WONUM,
LOCOFFDESC.DESCRIPTION,
WO.STATUS,
WO.LOCATION,
LOCOFF.EXT_LOC_HIERARCHY_PATH,
LOCOFF.SITEID,
LOCOFFHIER.PARENT,
WO.PARENT,
WO.WORKTYPE,
WO.REPORTEDBY,
WO.REPORTDATE,
WO.ACTFINISH,
WO.SITEID
Edited for MS SQL server. 为MS SQL Server编辑。 Edited AGAIN for Oracle :)
为Oracle编辑AGAIN :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.