2017-08-03 286 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)