2016-11-22 56 views
0

我想根据其他列的值得到列fpo的值。结果与查询中的CASE语句不符。有人能指出我的方向吗?SQL选择一个在其中的语句

SELECT SL.[Document No_], SL.[Sell-to Customer No_], SL.Type, SL.[Line No_], ISNULL(PO.No_, 'BUY') AS RPO, 
     CASE 
      WHEN PO.[Replan Ref_ No_] is null AND PO.[No_] IS NOT NULL THEN 'Neplanificata' 
      WHEN PO.[Replan Ref_ No_] IS NULL AND PO.[No_] = 'Buy' THEN 'Buy' 
      ELSE PO.[Replan Ref_ No_] 
     END AS fpo 
    FROM [SC Vermorel SRL$Sales Line] AS SL 
    INNER JOIN [SC Vermorel SRL$Sales Header] AS SH ON SL.[Document No_] = SH.No_ 
    INNER JOIN [SC Vermorel SRL$Customer] AS Cust ON SL.[Sell-to Customer No_] = Cust.No_ 
    LEFT OUTER JOIN [SC Vermorel SRL$Production Order] AS PO 
     ON (SH.[External Document No_] = PO.[Old Prod_ Order No_]) AND (PO.[Source No_] = SL.No_) AND (SL.Quantity = PO.Quantity) 

结果:

enter image description here

enter image description here

+0

你在哪里定义变量?据我所知,你不能在SELECT语句中进行更新。 –

+0

您是否试图持续更新表,或者您是否需要'NULL'的默认值? 'SELECT'读取那个,'SET'想**改变一个值。为此,你需要一个'UPDATE'。请描述你的需求。 – Shnugo

+0

仅在某些标准的情况下需要默认值。对不起,我没有正确指定。我更新了主要问题。 –

回答

1

这是你想要的吗?

SELECT SL.[Document No_], SL.[Sell-to Customer No_], SL.Type, SL.[Line No_], ISNULL(PO.No_, 'BUY') AS RPO, 
     CASE 
      WHEN ISNULL(PO.[Replan Ref_ No_],'') = '' AND PO.[No_] IS NOT NULL THEN 'Neplanificata' 
      WHEN ISNULL(PO.[Replan Ref_ No_],'') = '' AND ISNULL(PO.No_, 'BUY') = 'BUY' THEN 'Buy' 
      ELSE PO.[Replan Ref_ No_] 
     END AS fpo 
    FROM [SC Vermorel SRL$Sales Line] AS SL 
    INNER JOIN [SC Vermorel SRL$Sales Header] AS SH ON SL.[Document No_] = SH.No_ 
    INNER JOIN [SC Vermorel SRL$Customer] AS Cust ON SL.[Sell-to Customer No_] = Cust.No_ 
    LEFT OUTER JOIN [SC Vermorel SRL$Production Order] AS PO 
     ON (SH.[External Document No_] = PO.[Old Prod_ Order No_]) AND (PO.[Source No_] = SL.No_) AND (SL.Quantity = PO.Quantity) 
+0

试过了。不起作用。我认为CASE不会正确评估IS NOT NULL。更奇怪的是,它也不适用于IS NULL,应该工作。第二个WHEN也没有做到,尽管符合标准。 –

+2

不,在'case'表达式中'不为空'工作正确 –

+0

创建临时表,填充测试数据,更正对此数据的查询并将此代码与预期结果一起发布到您的问题中。 –