Is there a way to evaluate OR or AND logic functions using a group in t-SQL?
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
I could do it like this for a very simple case:
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
But if I had a lot of different columns (e.g., OnTime, 5 minutes late, 10 minutes late, etc.) that becomes pretty intensive.