Запрос SQL Server выполняется, но данные не возвращаются
Хотя следующий запрос выполняется, данные не возвращаются. Запрос разбивает столбцы на JudgmentMonth
, Consumer
а также Commercial
, Мои знания SQL Server невелики, но я предполагаю, что параметры даты не указаны, поэтому данные не возвращаются. Я не уверен, где дата должна быть введена вручную после>= и <=
WITH dset AS
(
SELECT
COUNT(category) AS Volumes,
MONTH(creation_date) AS JudgmentMonth,
transaction_type,
REPLACE(record_type, 3, 2) AS RecordType
FROM
table
WHERE
transaction_type = 'jg'
AND category = 'CCJ'
AND CAST(creation_date AS DATE) >= CONVERT(VARCHAR(12), GETDATE(), 101)
AND CAST(creation_date AS DATE) <= CONVERT(VARCHAR(12), GETDATE(), 101)
GROUP BY
MONTH(creation_date), transaction_type, REPLACE(record_type, 3, 2)
)
SELECT
x.JudgmentMonth,
MAX(CASE x.RecordType WHEN '1' THEN x.Volumes END) CONSUMER,
MAX(CASE x.RecordType WHEN '2' THEN x.Volumes END) COMMERCIAL
FROM
(SELECT
r.JudgmentMonth, r.RecordType, r.Volumes
FROM
dset r) x
GROUP BY
x.JudgmentMonth
2 ответа
Вы даете ему даты: вы даете ему getdate() дважды!
creation_date >= getdate and creation_date <= getdate
такой же как
creation_date = getdate()
Таким образом, если у вас нет строк с датой creation_date, точно совпадающей с текущей датой / временем, вы почти ничего не получите.
Преобразование вашей колонки creation_date
к date
собирается сделать ваш запрос не SARGable. Предполагая, что вам нужны данные на текущую дату, я бы предложил:
...
WHERE ...
AND creation_date >= CONVERT(date, GETDATE())
AND creation_date < CONVERT(date, DATEADD(DAY, 1, GETDATE()))
GROUP BY...
Это создаст запрос SARGable и, таким образом, будет выполняться намного быстрее, чем преобразование обеих сторон выражения.