我对 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/