Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在特定情况下使用适当的IF-ELSE_Sql_Sql Server_Excel - Fatal编程技术网

Sql 在特定情况下使用适当的IF-ELSE

Sql 在特定情况下使用适当的IF-ELSE,sql,sql-server,excel,Sql,Sql Server,Excel,我需要将两个不同但相关的Excel公式转换为SQL,以生成报表上的必要信息 1列I计算列C和列D之间的差值,如果列D中没有值,则计算列C和列H之间的差值 2 J列计算C列和H列之间经过的总时间,或C列和H列之间经过的总时间减去D列到E列 第一个公式在第一列- =TEXT(IF(D3<>"",D3-C3,H3-C3),"H:MM:SS") 这是我看了之后试过的,我基本上没有SQL知识。。。子栏D/C/H为实际标题名称- IF COLUMND > 0 BEGIN

我需要将两个不同但相关的Excel公式转换为SQL,以生成报表上的必要信息

1列I计算列C和列D之间的差值,如果列D中没有值,则计算列C和列H之间的差值

2 J列计算C列和H列之间经过的总时间,或C列和H列之间经过的总时间减去D列到E列

第一个公式在第一列-

=TEXT(IF(D3<>"",D3-C3,H3-C3),"H:MM:SS")
这是我看了之后试过的,我基本上没有SQL知识。。。子栏D/C/H为实际标题名称-

IF COLUMND > 0
    BEGIN
        COLUMND – COLUMNC
    END
ELSE
    BEGIN
        COLUMNH – COLUMNC
    END

我希望使用SQL计算正确的值,而不必导出报告和输入Excel公式。

如果要使用case语句,请使用以下方法计算列I:

SELECT CASE WHEN StartMeal is not null THEN StartMeal - StartShift
ELSE EndShift - StartShift END AS Difference

首先,您应该共享表定义,因为数据类型会影响数据的处理方式。下面是一个关于如何得到你想要的东西的例子。第一部分是如何发布示例数据以供询问

CREATE TABLE #SampleData(
    EmployeeName    varchar(100),
    ShiftDate       date,
    StartShift      datetime,
    StartMeal       datetime,
    EndMeal         datetime,
    EndShift        datetime)
INSERT INTO #SampleData
VALUES( 'TEST, TEST A', '20190424', '20190424 18:48', NULL, NULL, '20190425 03:04'),
      ( 'TEST, TEST B', '20190425', '20190425 07:00', '20190425 12:59', '20190425 13:57', '20190425 16:03')

SELECT * ,
    CONVERT( time, DATEADD( mi, ISNULL( DATEDIFF(mi, StartShift, StartMeal), DATEDIFF(mi, StartShift, EndShift)), 0)),
    CONVERT( time, DATEADD( mi, DATEDIFF(mi, StartShift, EndShift)- ISNULL(DATEDIFF(mi, StartMeal, EndMeal), 0), 0))
FROM #SampleData
SQL Fiddle示例:

SQL查询:

SELECT CONVERT(VARCHAR, 
               CASE
                 WHEN Startmeal is Null THEN EndShift - StartShift
                 ELSE StartMeal - StartShift
               END,
               8) AS DifferenceBetweenStartAndLunchOrEndTime
FROM MyTest;

到目前为止您尝试了什么?编辑以添加我尝试的代码。
SELECT CONVERT(VARCHAR, 
               CASE
                 WHEN Startmeal is Null THEN EndShift - StartShift
                 ELSE StartMeal - StartShift
               END,
               8) AS DifferenceBetweenStartAndLunchOrEndTime
FROM MyTest;