【发布时间】:2021-01-08 00:28:23
【问题描述】:
有没有办法在 t-SQL 中使用组来评估 OR 或 AND 逻辑函数?
DECLARE @TimeClock TABLE
(
EName NVARCHAR(14),
Time NVARCHAR(5),
OnTime TINYINT
)
INSERT INTO @TimeClock VALUES ('Adam', '07:55', 1)
INSERT INTO @TimeClock VALUES ('Adam', '08:03', 0)
INSERT INTO @TimeClock VALUES ('Bob', '07:57', 1)
INSERT INTO @TimeClock VALUES ('Bob', '07:59', 1)
INSERT INTO @TimeClock VALUES ('Carl', '08:01', 0)
INSERT INTO @TimeClock VALUES ('Carl', '08:02', 0)
SELECT
EName,
OR(OnTime) AS SometimesLate,
AND(OnTime) AS AlwaysLate,
NOT(OR(OnTime)) AS NeverLate
FROM
@TimeClock
GROUP BY
EName
对于一个非常简单的案例,我可以这样做:
SELECT
tc.EName,
IIF(n.EName IS NOT NULL, 1, 0) AS SometimesLate,
IIF(o.EName IS NULL, 1, 0) AS AlwaysLate,
IIF(n.EName IS NULL, 1, 0) AS NeverLate
FROM
(SELECT DISTINCT EName FROM @TimeClock) tc
LEFT JOIN
(SELECT DISTINCT EName FROM @TimeClock WHERE OnTime = 1) o ON o.EName = tc.EName
LEFT JOIN
(SELECT DISTINCT EName FROM @TimeClock WHERE OnTime = 0) n ON n.EName = tc.EName
但如果我有很多不同的列(例如,OnTime、迟到 5 分钟、迟到 10 分钟等),就会变得非常密集。
【问题讨论】:
标签: sql sql-server tsql count pivot