如果我查询不存在的记录,那么我将不会返回任何内容。我希望在那个场景中返回0

时间:2016-03-04 05:53:39

标签: sql-server-2008

这是我的简单查询。如果我查询不存在的记录,那么我将不会返回任何内容。我希望在那个场景中返回0。     请帮助我。谢谢你提前 这是我的简单查询。如果我查询不存在的记录,那么我将不会返回任何内容。我希望在那个场景中返回0。     请帮助我。谢谢你提前

SELECT *
    FROM (
        SELECT DISTINCT emp.EMP_CODE
            ,emp.EMP_NAME
            ,ROW_NUMBER() OVER (
                PARTITION BY emp.emp_code ORDER BY emp.EFFECTIVE_FROM DESC
                ) AS Row
            ,CASE 
                WHEN et.DAY = 03
                    AND et.MONTH = 02
                    AND et.YEAR = 16
                    AND et.EMP_CODE = emp.EMP_CODE
                    AND et.site_id = 21
                    THEN et.GENERAL_SHIFT
                ELSE '0'
                END AS G
            ,CASE 
                WHEN et.DAY = 03
                    AND et.MONTH = 02
                    AND et.YEAR = 16
                    AND et.EMP_CODE = emp.EMP_CODE
                    AND et.site_id = 21
                    THEN et.FIRST_SHIFT
                ELSE '0'
                END AS F
            ,CASE 
                WHEN et.DAY = 03
                    AND et.MONTH = 02
                    AND et.YEAR = 16
                    AND et.EMP_CODE = emp.EMP_CODE
                    AND et.site_id = 21
                    THEN et.SECOND_SHIFT
                ELSE '0'
                END AS S
            ,CASE 
                WHEN et.DAY = 03
                    AND et.MONTH = 02
                    AND et.YEAR = 16
                    AND et.EMP_CODE = emp.EMP_CODE
                    AND et.site_id = 21
                    THEN et.THIRD_SHIFT
                ELSE '0'
                END AS T
        FROM dbo.EMP_FPONM_EMPLOYEE_INFORMATION emp
        LEFT JOIN dbo.EMP_FPONM_EMP_TIME_SHEET et ON emp.EMP_CODE = et.EMP_CODE
        WHERE EMP.SITE_ID = 21
            AND emp.DEPT_NAME = @DEPT_NAME
            AND emp.STATUS = 'Present'
            AND et.DAY = 03
            AND et.MONTH = 02
            AND et.YEAR = 16
        ) a
    WHERE a.Row = 1

1 个答案:

答案 0 :(得分:0)

您可以使用ISNULL运算符执行此任务。 ISNULL允许您执行的操作是检查SQL操作中的特定值是否为NULL,并允许您返回其中的任何自定义值。非NULL值不受影响。它的工作原理如下:

SELECT Name, ISNULL(Department, 'Unassigned')
FROM [dbo].[Employee]

这样做,对于在department列中具有NULL字段的任何员工,输出表将Department列值显示为Unassigned。 您也可以将整个SQL查询用作输入。

SELECT ISNULL( (SELECT MAX(Score) FROM [dbo].[Students]), 'Unchecked')

在这种情况下,如果学生表的最高分数为NULL,我们会收到未选中的输出。 您可以找到详细的文档here

希望这有帮助。