sql-server - 我需要理解以下 MS SQL 语句(SELECT FROM VALUES)

标签 sql-server

我对 MS SQL 还很陌生,但现在我必须经常使用它。我需要了解这里发生了什么:

    BEGIN TRANSACTION loadHalfdayAbsences;
    INSERT INTO @halfDayAbsences
    ([AbsencePart], 
     [AbsenceId], 
     [DeleteDate], 
     [LastChangeDate]
    )
           SELECT CASE ap.AbsencePart
                      WHEN 1
                      THEN a.AbsenceStart
                      WHEN 3
                      THEN a.AbsenceEnd
                      ELSE CASE
                               WHEN a.AbsenceStartHalfDay = 1
                               THEN DATEADD(DAY, 1, a.AbsenceStart)
                               ELSE a.AbsenceStart
                           END
                  END AS newEnd,
                  CASE ap.AbsencePart
                      WHEN 1
                      THEN 0.50
                      WHEN 2
                      THEN 1.00
                      WHEN 3
                      THEN 0.50
                  END AS newDuration, 
                  [ap].[AbsencePart], 
                  [a].[AbsenceId], 
                  [a].[EmployeeId], 
           FROM
           (
               SELECT AbsencePart
               FROM(VALUES(1), (2), (3)) AS t(AbsencePart)
           ) AS ap
           INNER JOIN dwh.Absence AS a ON 1 = 1
           WHERE AbsenceType IN
           (
               SELECT AbsenceType
               FROM @AbsenceType4TimeTac
           )

特别是:

           FROM
           (
               SELECT AbsencePart
               FROM(VALUES(1), (2), (3)) AS t(AbsencePart)
           ) AS ap
           INNER JOIN dwh.Absence AS a ON 1 = 1
           WHERE AbsenceType IN
           (
               SELECT AbsenceType
               FROM @AbsenceType4TimeTac
           )
  • 这部分的作用是什么?
  • 这里的 VALUES 对我有什么作用?
  • 数据会怎样?
  • 是否已选择,但仅选择其中包含 1、2 或 3 的字段?或者 VALUES 发生了什么?

感谢您提前提供任何信息:)

最佳答案

部分

FROM (VALUES(1), (2), (3)) AS t(AbsencePart)

just 是一个内联表,由 1 到 3 三个值组成,位于名为 AbsensePart 的列中。您还可以使用以下语法:

FROM
(
    SELECT 1 AS AbsencePart UNION ALL
    SELECT 2 UNION ALL
    SELECT 3
) t

关于sql-server - 我需要理解以下 MS SQL 语句(SELECT FROM VALUES),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56599345/

相关文章:

c# - 在 SQL Server 2008 R2 中创建程序集时出错

c# - 在 SQL Server 中检查字母表

sql - 在 SQL 表上插入数据...找不到数据

mysql - SQL 中子查询返回多于 1 行?

sql - 将表中的行分组

sql-server - 向表添加非聚集索引以提高性能

sql - 使用 SQL,将多个表中的列总计为公共(public)组的正确方法是什么?

php - 修复 SQL 和循环以自动将数据放入 CGridView

c# - 使用存储过程从 SQL Server 返回数据

sql-server - SSRS 行可见性 - 在切换可见性时隐藏父行