繁体   English   中英

带有 if-else 逻辑的 SQL 查询

[英]SQL Query with if-else logic

我有一些必须随时维护的设备,我为这些设备创建了一个 SQL 数据库来安排时间。 现在我想知道每个设备的下一次维护日期。

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

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 专家。

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

还假设有一个 M_Done 数字列在维护完成时等于 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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM