【发布时间】:2014-02-05 14:39:04
【问题描述】:
我正在为我的公司创建流量报告,但我真的被这段代码卡住了..
我有一个报告编号,以及用编号表示的事故类型,即; 1-轻微,2-严重,3-致命,4-未受伤。
通常事故报告包含多个数字,例如:
报告编号 2014123 有一名驾驶员严重受伤“2”,乘客未受伤“4”。
所以当我触发选择查询 where report number=2014123 时,我得到两条记录,一条为“2”伤害,另一条为“4”。
在上述情况下,事故被视为“严重”,因为它包含“2”。 '4' 不考虑,因为乘客没有受伤。带有(轻微、严重、致命)的伤害代码的处理程度高于(未受伤)。
如何生成严重伤害报告(即代码“2”)并将伤害计为“2”(因为有两条记录)?
我尝试过的方法:
我尝试使用 SQL Case 语句:
(Case WHEN InjuryCode IN ('1','2','4') THEN 'Serious'
WHEN InjuryCode IN ('1','2','3','4') THEN 'FATAL'
WHEN InjuryCode IN ('1','4') THEN 'SLIGHT'
ELSE 'UNKNOWN'
END) AS ACCIDENT_STATUS
但我得到的只是重复和不正确的数据。
按以下方式优先考虑伤害代码: 3>2>1>4
例如:事故包含伤害代码为:
1,4- slight
2,4- serious
3,4- fatal
1,2,3,4-致命(因为3是最高伤害代码)等等等等..
我希望这不会让您感到困惑,但请多多包涵,我一开始完全糊涂了,但现在我实际上得到了图片,虽然没有解决方案,请帮助!
编辑(来自评论的完整查询):
SELECT REPORTNUMBER, INJURYCODE,
(CASE WHEN InjuryCode IN ('1','2','4') THEN 'Serious'
WHEN INJURYCODE IN ('1','2','3','4') THEN 'FATAL'
WHEN INJURYCODE IN ('1','4') THEN 'SLIGHT' ELSE 'UNKNOWN'
END) AS ACCIDENT_STATUS
FROM ACCIDENTS
WHERE REPORTNUMBER=20140302
【问题讨论】:
-
请显示您正在访问的数据的结构和/或带有case语句的完整查询。
-
@GordonLinoff:当然,选择 REPORTNUMBER、INJURYCODE、CASE(当 InjuryCode IN ('1','2','4') THEN 'Serious' WHEN INJURYCODE IN ('1','2 ','3','4') THEN 'FATAL' WHEN INJURYCODE IN ('1','4') THEN '轻微' ELSE 'UNKNOWN' END) 作为 ACCIDENT_STATUS 来自 REPORTNUMBER=20140302 的事故
-
建议:您不应该将数字放在引号中。它要么是一个不使用引号的数字,要么是一个字符串,所以你应该避免使用无意义的数字。