SQL Server :从日期减去一年的表中选择 *



如何选择第一年?

这是我的代码:

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

Msg 4145,级别 15,状态 1,第 6
行 在需要条件的上下文中指定的非布尔类型的表达式,靠近"("。

请帮助我

所需数据:订单日期、ID、数量、订单日期-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())

我怀疑你想要的是:

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子句中有日期计算,而不是布尔表达式。 这会导致您的错误。
  • date 表达式具有第三个参数的字符串。 这将是您的下一个错误。 字符串不引用列名。
  • 我推测您希望在该日期表达式上连接表。

试试这个:-

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;

最新更新