Запрос 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 и, таким образом, будет выполняться намного быстрее, чем преобразование обеих сторон выражения.

Другие вопросы по тегам