SQL Server: выберите * из таблицы, где дата минус один год - PullRequest
0 голосов
/ 29 сентября 2018

Как выбрать год-1?

Это мой код:

select 
    a.* 
from 
    (select 
         met_men, kli_kod, pre_kod, galutinis, savik_group, marza, 
         KLR_KOD, KLI_POZ1, KLI_POZ2, KLI_POZ3, KLG_KOD, PRE_RUS, 
         PRE_POZ1, PRE_POZ2, PRE_POZ3, PRE_POZ4, PRE_POZ5, PRE_POZ6, 
         did_dat, savi_suproc, marza_suproc, pre_ska dbo.SVF_View_10) AS a 
left outer join 
    (select 
         pre_kod, kli_kod, met_men, did_dat 
     from 
         dbo.SVF_View_10_sum 
     where 
         dateadd(year, -1, 'did_dat')) as b on a.kli_kod = b.kli_kod 
                                            and a.pre_kod = b.pre_kod 
                                            and a.did_dat = b.did_dat

Эта ошибка возникает в строке where DATEADD(year, -1, 'did_dat')) as b:

Msg4145, Уровень 15, Состояние 1, Строка 6
Выражение не булева типа, указанное в контексте, где ожидается условие, рядом с ')'.

Пожалуйста, помогите мне

обязательные данные: дата заказа, id, количество, дата заказа-1 год, количество.Необходимо сравнить количество проданных за этот год и за прошлый год

Ответы [ 3 ]

0 голосов
/ 29 сентября 2018

Попробуйте: -

SELECT a.*
    FROM
    (
        SELECT met_men,kli_kod,pre_kod,galutinis,savik_group,marza,KLR_KOD,LI_POZ1,
               KLI_POZ2,KLI_POZ3,KLG_KOD,PRE_RUS,PRE_POZ1,PRE_POZ2,PRE_POZ3,PRE_POZ4,
               PRE_POZ5,PRE_POZ6,did_dat,savi_suproc,marza_suproc,pre_ska
        FROM SVF_View_10_sum
    ) AS a
        LEFT OUTER JOIN
        (
            SELECT pre_kod,kli_kod,met_men,did_dat
            FROM dbo.SVF_View_10_sum
            WHERE did_dat = DATEADD(YEAR, -1, did_dat)
        ) AS b
            ON a.kli_kod = b.kli_kod AND a.pre_kod = b.pre_kod AND a.did_dat = b.did_dat;
0 голосов
/ 29 сентября 2018

Вы задаете имя столбца в одинарной кавычке dateadd (год, -1, did_dat), который здесь не требуется, заменяется на dateadd (год, -1, did_dat), и при использовании выражения where необходимо указать операцию сравнения, гдеусловие.

, поэтому изменено на

where did_dat <= dateadd(year, -1, did_dat)

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

where did_dat <= dateadd(year, -1, GETDATE())
0 голосов
/ 29 сентября 2018

Я подозреваю, что вы хотите:

select . . .
from dbo.SVF_View_10 v left outer join
     dbo.SVF_View_10_sum vs
     on v.kli_kod = vs.kli_kod and a.pre_kod = b.pre_kod and
        v.did_dat = dateadd(year, -1, vs.did_dat);

Примечания:

  • Подзапросы не нужны для этого запроса.Я думаю, что они просто затрудняют написание и чтение запроса.
  • Используйте псевдонимы таблиц, которые являются аббревиатурами для имен таблиц.
  • У вас есть вычисление даты в предложении where вместологическое выражение.Это приводит к вашей ошибке.
  • Выражение даты имеет строку для третьего аргумента.Это будет ваша следующая ошибка.Строки не ссылаются на имена столбцов.
  • Я предполагаю, что вы хотите, чтобы таблицы были объединены в этом выражении даты.
...