2017-08-03 283 views
0

我试图让这个语句来工作,但它说我有错误的“INV.CaseQty = 1”SQL CASE WHEN语句

我想要得到它的逻辑:

when x = 1 then y = 1 else y 

CASE WHEN INV.CaseUp = 1 then INV.CaseQty = 1 ELSE INV.CaseQty end 

非常感谢大家的帮助

这是我从一个存储过程

select C.CustomerNum, ISNULL(ST.ShiptoNum,'') Shipto, I.InvoiceNum, 
     DatePart(yyyy,I.InvoiceDate) DeliveryYear, 
     DatePart(qq,I.InvoiceDate) DeliveryQuarter, 
     DatePart(MM,I.InvoiceDate) DeliveryMonth, 
     DatePart(WW,I.InvoiceDate) DeliveryWeek, 
     CAST(I.InvoiceDate as Date) DeliveryDate, INV.InventoryNum, 
     IP.InventoryPackageNum, ISNULL(CaseQty, 0) QTYinEach, 
     ID.Description,ISNULL(IT.Description,'No Type') SubCategory, 
     CASE WHEN INV.CaseUp = 1 then INV.CaseQty = 1 
      ELSE INV.CaseQty 
     end 

原TABL SELECT查询Ë

Description        CaseQty  caseup 
Royal 5" Red Stripe Plastic Sip Stirrer 1000   1 
Ecoproducts Plant Starch Knife   1000   0 
Ecoproducts Plant Starch Fork   1000   1 
Ecoproducts Plant Starch Spoon   1000   0 

我想从我的存储过程的SELECT查询能够改变那些CaseUp = 1,CaseQty应该变为1为好。

+0

你想达到什么是它的select语句?发布完整的查询以获得合适的答案 –

+0

是的,我想在select语句中使用它,所以如果我要执行IF语句,我不能将它放在select语句中。我只能使用CASE。我如何解决这个问题? – kate

+0

发布您的选择查询以显示您想要达到的效果或查询后至少可以查看表格数据和结果数据以了解您的要求 –

回答

2

你不能“设置值”为你试图与INV.CaseQty = 1做的,你是从表中选择值

SELECT CASE WHEN INV.CaseUp = 1 THEN 1 ELSE INV.CaseQty END as CaseQty 
0

你描述是不连贯的逻辑:THEN子句中要执行的操作但是在ELSE子句中,您将返回一个值,并且这些操作不兼容。

赋值过程将通过IF ... ELSE结构完成;根据条件返回不同的值将通过CASE结构完成。

+0

但OP没有提及使用PLSQL –

+0

我也没有;) – Brian

+0

如何在sql查询中使用if else(我不知道这是可能的)。 –

0

它看起来像你需要它的where子句 也许像:

where 
((INV.CaseUp = 1 and INV.CaseQty = 1) or INV.CaseUp <> 1)