#sql-server #tsql
Вопрос:
У меня есть таблица в SQL Server:
CREATE TABLE healthRegistration
(
ID uniqueidentifier PRIMARY KEY,
RegisterDateTime DateTime NOT NULL,
RUFeelingWell Bool NOT NULL
);
Это RegisterDateTime
дата и время, когда пользователь создал реестр, и RUFeelingWell
является логическим значением.
Я хочу создать запрос, который возвращает 3 столбца: Дата регистрации, Количество записей с RUFeelingWell = False на эту дату, Количество записей с RUFeelingWell = True на эту дату
Как я могу это сделать?
Ответ №1:
SELECT CAST(T.RegisterDateTime AS DATE)REGISTERDATE,
SUM
(
CASE
WHEN T.RUFeelingWell =1 THEN 1
ELSE 0
END
)AS TRUE_RECORDS,
SUM
( CASE
WHEN T.RUFeelingWell =0 THEN 1
ELSE 0
END
)AS FALSE_RECORDS
FROM healthRegistration AS T
GROUP BY CAST(T.RegisterDateTime AS DATE)
Ответ №2:
Попробуйте выполнить этот запрос:
Select
Convert(char(8), RegisterDateTime, 112),
Sum(Case RUFeelingWell When 1 Then 1 Else 0 End) As wellnos,
Sum(Case RUFeelingWell When 0 Then 1 Else 0 End) As notwellnos
From healthRegistration
Group By Convert(char(8), RegisterDateTime, 112)
Order By Convert(char(8), RegisterDateTime, 112)
Здесь Преобразование(символ(8), RegisterDateTime, 112) дает дату в формате ГГГГММДД, так что записи за день суммируются вместе.
Логические значения хранятся в базе данных как 1 и 0