Таблица: У меня есть таблица базы данных TestingTable в SQL Server 2012. Это как таблица выглядит следующим образом:Как использовать несколько функций DATEPART в инструкции CASE?
column_ts column1 FirstName LastName
2016-09-30 00:04:00.000 5 Martha Stuart
2016-09-30 00:24:00.000 51 Tom Riddle
2016-09-30 00:29:00.000 32 Harry Potter
2016-09-30 00:44:00.000 128 Anderson Smith
2016-09-30 00:48:00.000 23 Lisa Young
2016-09-30 01:04:00.000 88 Mad Max
2016-09-30 01:59:00.000 46 Sam King
DDL: Вы можете создать эту таблицу, используя:
CREATE TABLE TestingTable
(
column_ts datetime,
column1 int,
FirstName varchar(255),
LastName varchar(255)
);
INSERT INTO TestingTable
VALUES ('2016-09-30 00:04:00.000',5,'Martha','Stuart'),
('2016-09-30 00:24:00.000',51,'Tom','Riddle'),
('2016-09-30 00:29:00.000',32,'Harry','Potter'),
('2016-09-30 00:44:00.000',128,'Anderson','Smith'),
('2016-09-30 00:48:00.000',23,'Lisa','Young'),
('2016-09-30 01:04:00.000',88,'Mad','Max'),
('2016-09-30 01:04:00.000',46,'Sam','King');
I есть запрос, который выбирает column1 только в том случае, если column_ts имеет минутное значение между 26-30 OR 56-00.
select ISNULL(column1,0) from TestingTable
where ((DATEPART(n, column_ts) > 25) AND DATEPART(n, column_ts) <= 30)
OR (((DATEPART(n, column_ts) > 55) AND DATEPART(n, column_ts) <= 59) OR DATEPART(n, column_ts) = 0);
Результат будет:
(No column name)
32
46
Моя цель: Теперь я хочу использовать приведенный выше запрос в качестве суб запроса. Когда задано значение FirstName (будет иметь уникальные значения), выберите строку с таким именем, но выберите значение column1, только если значение column_ts имеет значение минус 26-30 ИЛИ 56-00. Else выберите столбец1 как ноль.
Что я пытался: Я думаю, что мне придется использовать CASE, но я читал, что мы не можем/не должны использовать скобки в CASE. Я пытался что-то, но получаю ошибку синтаксиса для него:
select column_ts, column1 =
CASE column_ts
WHEN (((DATEPART(n, column_ts) > 25) AND DATEPART(n, column_ts) <= 30)
OR (((DATEPART(n, column_ts) > 55) AND DATEPART(n, column_ts) <= 59) OR DATEPART(n, column_ts) = 0)) THEN column_ts
ELSE 0
END, FirstName, LastName
from TestingTable
where FirstName = 'Tom';
Ошибка: выше запроса дает синтаксическую ошибку:
Msg 102, Level 15, State 1, Line 3
Incorrect syntax near '>'.
Msg 102, Level 15, State 1, Line 4
Incorrect syntax near 'DATEPART'.
Пожалуйста, предложите мне, как я могу исправить приведенный выше запрос или написать другой запрос для достижения моя цель.
удалить 'colum_ts' после' case'. а также 'cast'' else' как 'datetime', потому что' when' возвращает 'datetime'. –