在特定情况下正确使用IF ELSE

时间:2019-05-08 20:41:42

标签: sql sql-server excel

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

report for reference

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公式。

3 个答案:

答案 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;