具有if-else逻辑的SQL查询

时间:2019-12-05 11:31:48

标签: sql sql-server

我有些设备必须经常维护,我创建了一个SQL DB来安排这些设备的时间。现在,我想知道每个设备的下一个维护日期。

我有四种类型的维护,每个维护都有间隔(像这样)

CI ---------- 12000 Hour
HGPI-------24000 hour
CI2 -------- 36000 Hour
MI --------- 48000 Hour

我已经在数据库中为维护创建了一个表,因此将记录每个维护,然后记录是否已完成(像这样)

M_ID  |  Device_ID  |  Device_Work_Hours  |  M_Type  |   M_Done  |  M_ExpectedDate
  1   |   1         |         25000       |  HGPI    |    NO     |    5-12-2019

我想使用以下逻辑为这些维护记录建立查询:

  • 如果未完成CI类型的维护并且设备的工作时间少于24000,则选择CI维护记录。
  • 如果尚未完成HGPI类型的维护并且设备小时数在24000和48000之间,则即使CI和CI2尚未完成,也要选择HGPI。
  • 如果未完成MI类型的维护并且设备小时数超过48000,则选择MI则不会执行其他维护类型。

我正在使用MS SQL Server。 SQL专家,请您的帮助。

1 个答案:

答案 0 :(得分:0)

假设还有一个表,其中包含维护类型。 该M_ID是该表的外键。

还假设维护完成后,有一个M_Done number列等于1。

SELECT m.*
FROM your_maintenance_table AS m
JOIN your_maintenance_type_table AS mtp
  ON mtp.ID = m.M_ID 
 AND mtp.Type IN ('CI', 'HGPI', 'MI')
WHERE (m.M_Done <> 1 OR m.M_Done IS NULL)
  AND 
   (CASE 
    WHEN mtp.Type = 'CI' AND m.Device_Work_Hours < 24000 THEN 1
    WHEN mtp.Type = 'HGPI' AND m.Device_Work_Hours Device_Work_Hours BETWEEN 24000 AND 48000 THEN 2
    WHEN mtp.Type = 'MI' AND m.Device_Work_Hours > 48000 THEN 3
    ELSE 0
    END) > 0;