如何在SQL中存在时使用返回两个值

时间:2017-09-29 18:23:42

标签: sql

ot_notes表中,每项工作都有不同的任务。这个特定的工作有20行。我需要找到'Weld_Complete',如果它不存在我正在寻找'Weld_Start'。这段代码也按照我想要的方式工作,但我还需要返回作业号,这样我就可以将它链接到另一个查询。我怎么做?

提前致谢。

SELECT 
    CASE 
       WHEN EXISTS (SELECT 1 FROM ot_notes) 
          THEN (SELECT task 
                FROM ot_notes 
                WHERE job = '61249' AND task = 'Weld_Complete') 
       ELSE
          CASE 
             WHEN EXISTS (SELECT 1 FROM ot_notes) 
                THEN (SELECT task 
                      FROM ot_notes 
                      WHERE job = '61249' AND task = 'Weld_Start') 
             ELSE ' ' 
          END 
    END AS weld

以下查询为我提供了作业61249的所有任务:SELECT作业,来自ot_notes WHere job ='61249'的任务。这对每项工作都不同。我需要找到Weld_Complete,如果不存在,我需要寻找Weld_Start,或者找不到它。我需要他的工作和任务领域。上面的查询给了我想要的东西,除了工作。

job     task
-----   -----------
61249   Update_Date
61249   Weld_Start
61249   Paint_Start
61249   Note
61249   Note
61249   Note
61249   Ship_Complete
61249   Update_Date
61249   Note
61249   Note
61249   Note
61249   Paint_Complete
61249   Weld_Complete
61249   Note
61249   Note
61249   Ship_Partial
61249   Update_Date
61249   Note
61249   Note
61249   Note

2 个答案:

答案 0 :(得分:0)

如果您只想要(No column name) 4 优先于'Weld_Complete'的一行,那么您可以使用'Weld_Start'ORDER BY

LIMIT

答案 1 :(得分:0)

如果您希望获得任务值为“Weld_Complete”或“Weld_Start”(根据其优先级)的所有作业,则可以使用此查询。

;WITH tasks
AS (
    SELECT * FROM 
        (VALUES(1,'Weld_Complete'), (2,'Weld_Start')) tasks (priorty, task)
) 
, CTE AS (
select 
    n.* 
    from ot_notes n 
        inner join tasks t on n.task  = t.task
)
SELECT * FROM CTE