我需要将两个不同但相关的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")
第二个公式在J栏--
=TEXT((H3-C3)-(E3-D3), "H:MM:SS")
这是我看完this video后尝试的,我基本上没有SQL知识…(实际标题名称为sub COLUMND/C/H。)--
IF COLUMND > 0
BEGIN
COLUMND – COLUMNC
END
ELSE
BEGIN
COLUMNH – COLUMNC
END
我希望使用SQL计算正确的值,而不必导出报告和输入Excel公式。
发布于 2019-05-09 04:55:36
如果要使用case语句,下面是如何计算Col i的方法:
SELECT CASE WHEN StartMeal is not null THEN StartMeal - StartShift
ELSE EndShift - StartShift END AS Difference
发布于 2019-05-09 05:02:21
对于初学者,您应该共享表定义,因为数据类型会影响数据的处理方式。这里有一个关于如何得到你想要的东西的例子。第一部分是您应该如何发布您的样本数据以供询问。
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
发布于 2019-05-09 05:07:59
SQL Fiddle示例:http://sqlfiddle.com/#!18/3da8b/10
SQL查询:
SELECT CONVERT(VARCHAR,
CASE
WHEN Startmeal is Null THEN EndShift - StartShift
ELSE StartMeal - StartShift
END,
8) AS DifferenceBetweenStartAndLunchOrEndTime
FROM MyTest;
https://stackoverflow.com/questions/56048755
复制相似问题