SQL连接三个表将返回额外的NULL行

时间:2018-09-04 18:20:30

标签: sql join

我要加入三个表,以查看物业维护人员完成一项任务需要多长时间。我需要属性名称,任务是什么,花费了多长时间以及这个人是谁。

要注意的是,有些任务没有名字就进入了系统,这完全没问题,因此将其呈现为NULL。但是要跟踪执行一项任务需要花费多长时间,没有名称的任务在没有时间的情况下会显示为None。那也行。上面印有人名的任务显示两行-一行用于花花公子,另一行用于NULL。

如果任务中有一个人的名字,我不希望NULL / None。在下面,您可以看到查询的简化版本。我只想要显示Mikhail的行。

有什么想法吗?感谢您的帮助。

结果

1   2415    35719   NULL    Lobby ceiling and wall leaking
2   2415    35719   Mikhail Lobby ceiling and wall leaking

预期

2   2415    35719   Mikhail Lobby ceiling and wall leaking

代码:

SELECT  
    p.sCode "Property",
    p.sAddr1 "PropertyName",
    wo.scode,
    COALESCE(person.sfirstname + ' ' + person.ulastname, 'None'),
    wo.sbriefdesc,
    wo.spriority,
    wo.scategory,
    wo.ssubcat,
    ISNULL(wod.dtactstart, 0),
    ISNULL(wod.dtactfinish, 0),
    /* COALESCE(ROUND((CAST((wo.dtwcompl - wo.dtcall) AS FLOAT) * 24.0 * 60), 3), 0) AS TechTimeInMins */
    COALESCE(ROUND((CAST((wod.dtactfinish - wod.dtactstart) AS FLOAT) * 24.0), 3), 0) AS TechTimeInHours,
    COALESCE(ROUND((CAST((wod.dtactfinish - wod.dtactstart) AS FLOAT)), 3), 0) AS TechTimeInDays
FROM
    MM2WO wo
LEFT OUTER JOIN
    property p ON wo.hProperty = p.hMy
LEFT OUTER JOIN
    mm2wodet wod ON wod.hWo = wo.hMy
LEFT OUTER JOIN
    person ON person.hmy = wod.hperson
WHERE
    1 = 1
    AND wo.sstatus IN ('Work Completed')
ORDER BY  
    p.sAddr1 ASC, wo.scode

1 个答案:

答案 0 :(得分:0)

From MM2WO wo
    left outer join property p on wo.hProperty = p.hMy
    left outer join mm2wodet wod on wo.hMy= wod.hWo 
    left outer join person on person.hmy = wod.hperson
     where 1 = 1 and  wod.hperson is not null and 
    person.sfirstname   is not null  and  person.ulastname  is not null
In this case id sfirstname or ulastname is null it will replace name with space for that person