2016-02-29 5 views
-2
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 

Я получаю сообщение об ошибке, что неправильный синтаксис саза *саз вызывает ошибку

+0

[Плохие привычки пинать: использование старого стиля JOIN и] (http://sqlblog.com/blogs/aaron_bertrand/ архив/2009/10/08/bad-habitits-to-kick-use-old-style-joins.aspx) - этот стиль * разделенного запятыми стиля * стиля * был заменен на * proper * ANSI 'JOIN 'синтаксис в ANSI - ** 92 ** SQL Standard (** более 20 лет ** назад), и его использование не рекомендуется –

+0

Ваш код не имеет смысла, и я не уверен, что вы пытаетесь сделать , Просто беря первое выражение 'CASE', игнорируя остальные, и предполагая, что' JANORG' равно '0', мы получаем следующее предложение WHERE: 'bom.pk_ID = bomitem.fk_bomid AND p.budgetyear = o.budgetyear AND v .JANORG'. Это неполно. Что должно было быть сделано * с 'v.JANORG'? –

ответ

0

Вашего выражение 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 
+0

См. Я пытаюсь сохранить эти значения в переменной, потому что я буду нуждаться в них в следующем операторе, и если я возьму этот CASE WHEN v.JANORG <> '0' THEN v.JANORG WHEN v.JANAREA <> '0' THEN v.JANAREA ELSE p.JANORG END = @ JANORG, что означает, что мне нужно значение janorg, чтобы я мог использовать их в своих вычислениях. – user5987950

+0

Я все еще не совсем понимаю, что вы после, но выражения искажены, а также предложение 'WHERE', выражения CASE' должны быть отформатированы одним из двух способов, о которых я упомянул, а предложение WHERE не может иметь список условий, разделенных запятыми. Если вы пытаетесь установить значения этих переменных, это будет происходить в 'SET' или' SELECT', но вы не можете хранить несколько строк в 'INT'. Возможно, вы могли бы показать, где вы пытаетесь использовать эти переменные? –