我需要将两个不同但相关的Excel公式转换为SQL,以生成有关报告的必要信息。
1)第I列正在计算C列与D列之间的差,如果D列中没有值,则计算C列与H列之间的差。
2)J列正在计算C列与H列之间的总时间,或C列与H列之间的总时间减去D列至E列的时间。
第一个公式在第I列中
=TEXT(IF(D3<>"",D3-C3,H3-C3),"H:MM:SS")
第二个公式在J列中
=TEXT((H3-C3)-(E3-D3), "H:MM:SS")
这是我在观看this video之后尝试过的方法,但我基本上不具备SQL知识...(实际标题名称的名称为COLUMND / C / H)。
IF COLUMND > 0
BEGIN
COLUMND – COLUMNC
END
ELSE
BEGIN
COLUMNH – COLUMNC
END
我希望可以使用SQL计算正确的值,而不必导出报告并输入Excel公式。
答案 0 :(得分:1)
您要使用case语句,这是计算Col I的方法:
SELECT CASE WHEN StartMeal is not null THEN StartMeal - StartShift
ELSE EndShift - StartShift END AS Difference
答案 1 :(得分:0)
对于初学者来说,您应该共享表定义,因为数据类型会影响数据的处理方式。这是有关如何获得您所要问的示例。第一部分是如何发布示例数据进行询问。
var fileUrls = new[]
{
new Uri("https://docs.microsoft.com/en-us/dotnet/standard/microservices-architecture/implement-resilient-applications/media/image3.5.png"),
new Uri("https://docs.microsoft.com/en-us/dotnet/standard/microservices-architecture/implement-resilient-applications/media/image4.png"),
new Uri("https://docs.microsoft.com/en-us/dotnet/standard/microservices-architecture/implement-resilient-applications/media/image6.png")
};
var downloadResults = fileUrls
.Select(uri => (uri: uri, response: HttpClientFactory.Create().SendAsync(new HttpRequestMessage(HttpMethod.Get, uri))))
.ToArray();
await Task.WhenAll(downloadResults.Select(v => v.response));
using (var ms = new MemoryStream())
{
using (var archive = new ZipArchive(ms, ZipArchiveMode.Create, true))
{
foreach (var download in downloadResults)
{
var entry = archive.CreateEntry(download.uri.Segments.Last(), CompressionLevel.Fastest);
using (var zipStream = entry.Open())
{
var data = await download.response.Result.Content.ReadAsByteArrayAsync();
zipStream.Write(data, 0, data.Length);
}
}
}
using (var fileStream = File.Create($"{DateTime.Now.Ticks}.zip"))
{
await fileStream.WriteAsync(ms.ToArray());
}
}
答案 2 :(得分:0)
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;