Sql 在特定情况下使用适当的IF-ELSE
我需要将两个不同但相关的Excel公式转换为SQL,以生成报表上的必要信息 1列I计算列C和列D之间的差值,如果列D中没有值,则计算列C和列H之间的差值 2 J列计算C列和H列之间经过的总时间,或C列和H列之间经过的总时间减去D列到E列 第一个公式在第一列-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
=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;