CASE语句导致错误
declare @JANORG int;
declare @FEBORG int;
declare @MARORG int;
declare @APRORG int;
declare @MAYORG int;
declare @JUNORG int;
declare @JULORG int;
declare @AUGORG int;
declare @SEPORG int;
declare @OCTORG int;
declare @NOVORG int;
declare @DECORG int;
select
p.orgid, p.projid, bomitem.fk_itemid, p.budgetyear,
SUM(cast((bom.component_attachrate*bomitem.itemqty*@JANORG)/100 AS INT)),
SUM(cast((bom.component_attachrate*bomitem.itemqty*@FEBORG)/100 AS INT)),
SUM(cast((bom.component_attachrate*bomitem.itemqty*@MARORG)/100 AS INT)),
SUM(cast((bom.component_attachrate*bomitem.itemqty*@APRORG)/100 AS INT)),
SUM(cast((bom.component_attachrate*bomitem.itemqty*@MAYORG)/100 AS INT)),
SUM(cast((bom.component_attachrate*bomitem.itemqty*@JUNORG)/100 AS INT)),
SUM(cast((bom.component_attachrate*bomitem.itemqty*@JULORG)/100 AS INT)),
SUM(cast((bom.component_attachrate*bomitem.itemqty*@AUGORG)/100 AS INT)),
SUM(cast((bom.component_attachrate*bomitem.itemqty*@SEPORG)/100 AS INT)),
SUM(cast((bom.component_attachrate*bomitem.itemqty*@OCTORG)/100 AS INT)),
SUM(cast((bom.component_attachrate*bomitem.itemqty*@NOVORG)/100 AS INT)),
SUM(cast((bom.component_attachrate*bomitem.itemqty*@DECORG)/100 AS INT))
from
REF_VHF_COMPONENT bom, VHF_COMPONENT_ITEMS bomitem,
VHF_PRJFCAST v, VHF_SYSGEN_PROJ p, VHF_ORGPT o
where
bom.pk_ID = bomitem.fk_bomid
and p.budgetyear = o.budgetyear
and CASE @JANORG WHEN v.JANORG = '0' THEN v.JANORG WHEN v.JANAREA = '0' THEN v.JANAREA ELSE p.JANORG END,
CASE @FEBORG WHEN v.FEBORG <> '0' THEN v.FEBORG WHEN v.FEBAREA <> '0' THEN v.FEBAREA ELSE p.FEBORG END,
CASE @MARORG WHEN v.MARORG <> '0' THEN v.MARORG WHEN v.MARAREA <> '0' THEN v.MARAREA ELSE p.MARORG END,
CASE @APRORG WHEN v.APRORG <> '0' THEN v.APRORG WHEN v.APRAREA <> '0' THEN v.APRAREA ELSE p.APRORG END,
CASE @MAYORG WHEN v.MAYORG <> '0' THEN v.MAYORG WHEN v.MAYAREA <> '0' THEN v.MAYAREA ELSE p.MAYORG END,
CASE @JUNORG WHEN v.JUNORG <> '0' THEN v.JUNORG WHEN v.JUNAREA <> '0' THEN v.JUNAREA ELSE p.JUNORG END,
CASE @JULORG WHEN v.JULORG <> '0' THEN v.JULORG WHEN v.JULAREA <> '0' THEN v.JULAREA ELSE p.JULORG END,
CASE @AUGORG WHEN v.AUGORG <> '0' THEN v.AUGORG WHEN v.AUGAREA <> '0' THEN v.AUGAREA ELSE p.AUGORG END,
CASE @SEPORG WHEN v.SEPORG <> '0' THEN v.SEPORG WHEN v.SEPAREA <> '0' THEN v.SEPAREA ELSE p.SEPORG END,
CASE @OCTORG WHEN v.OCTORG <> '0' THEN v.OCTORG WHEN v.OCTAREA <> '0' THEN v.OCTAREA ELSE p.OCTORG END,
CASE @NOVORG WHEN v.NOVORG <> '0' THEN v.NOVORG WHEN v.NOVAREA <> '0' THEN v.NOVAREA ELSE p.NOVORG END,
CASE @DECORG WHEN v.DECORG <> '0' THEN v.DECORG WHEN v.DECAREA <> '0' THEN v.DECAREA ELSE p.DECORG END
group by
bomitem.fk_itemid, p.orgid, p.projid, bomitem.fk_itemid, p.budgetyear
我得到一个错误,case语句的语法不正确*CASE语句导致错误
你CASE
表达不遵循任何两个适当的格式。要么你可以找出你想要的值进行比较,以一次:
CASE col1 WHEN 'dog' THEN 1
WHEN 'cat' THEN 2
WHEN 'horse' THEN 3
END
或者你可以使用更灵活的形式,其中每个WHEN
具有可参考不同领域的综合标准:
CASE WHEN col1 = 'dog' THEN 1
WHEN col2 = 'horse' THEN 1
WHEN col3 = 'cat' THEN 2
END
目前还不清楚你正试图用你的CASE
表达式做什么。如果你想使用它们进行过滤,你需要评估对别的东西CASE
表达:
WHERE CASE ... END = @variable1
AND CASE ... END = @variable2
请参阅我试图将这些值存储在变量中,因为我将在下一个语句中需要它们,并且如果我将这个案例作为v.JANORG '0',那么v.JANORG当v.JANAREA '0' THEN v.JANAREA ELSE p.JANORG END = @ JANORG这意味着我需要janorg的价值,以便我可以在我的计算中使用它们 – user5987950
我还是不太关注你之后的情况,但表达式格式不正确'WHERE'子句,'CASE'表达式必须用我提到的两种方式之一来格式化,'WHERE'子句不能有逗号分隔的条件列表。如果你正试图设置这些变量的值,它会发生在'SET'或'SELECT'中,但是你不能将多行存储在'INT'中。也许你可以展示你想利用这些变量的地方? –
[不良习惯踢:使用旧样式的JOIN(http://sqlblog.com/blogs/aaron_bertrand/ archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx) - 旧式*逗号分隔的表*样式列表已替换为* proper * ANSI * JOIN 'ANSI语法 - ** 92 ** SQL标准(**超过20年**之前),并且不鼓励使用 –
您的代码没有意义,我不确定您要做什么。只要第一个'CASE'表达式,忽略其他',并假设'JANORG'为'0',我们得到以下'WHERE'子句:'bom.pk_ID = bomitem.fk_bomid AND p.budgetyear = o.budgetyear AND v .JANORG'。这是不完整的。 “v.JANORG”是什么意思? –