如何选择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
行:
信息4145,第15级,状态1,第6行
在需要条件的上下文中在')'附近指定的非布尔类型的表达式。
请帮助我
必填数据:订单日期,id,数量,orderdate-1年,数量。有必要比较今年和去年的销售量
答案 0 :(得分:1)
您在单引号dateadd(year,-1,'did_dat')中给出列名,此处无需将其更改为dateadd(year,-1,did_dat),并且当您使用where子句时需要在where中进行比较操作条款。
已更改为
where did_dat <= dateadd(year, -1, did_dat)
但这没有任何意义,因为查询应该在上一年针对当前日期执行,例如
where did_dat <= dateadd(year, -1, GETDATE())
答案 1 :(得分:0)
我怀疑您想要的是什么
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
子句中有一个日期计算,而不是布尔表达式。那是造成您的错误。答案 2 :(得分:0)
尝试一下:-
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;