Запрос SQL Server выполняется, но данные не возвращаются - PullRequest
0 голосов
/ 11 июня 2018

Хотя следующий запрос выполняется, данные не возвращаются.Запрос разбивает столбцы на JudgmentMonth, Consumer и Commercial.Мои знания SQL Server невелики, но я предполагаю, что параметры даты не указаны, поэтому данные не возвращаются.Я не уверен, где дата должна быть введена вручную после> = и <= </p>

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 ]

0 голосов
/ 11 июня 2018

Преобразование вашего столбца creation_date в date сделает ваш запрос не SARGable. Предполагая, , что вам нужны данные для текущей даты, я бы предложил:

...
WHERE ...
  AND creation_date >= CONVERT(date, GETDATE())
  AND creation_date < CONVERT(date, DATEADD(DAY, 1, GETDATE()))
GROUP BY...

Это создаст запрос SARGable и, следовательно, будет выполняться намного быстрее, чем преобразование обеих сторон выражения..

0 голосов
/ 11 июня 2018

Вы даете ему даты: вы даете ему getdate () дважды!

creation_date >= getdate and creation_date <= getdate

- это то же самое, что и

creation_date = getdate()

Так что, если у вас есть строки с creation_date, точно совпадающими стекущая дата / время, вы совсем ничего не получите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...