【问题标题】:SQL Select with a set statement in it带有 set 语句的 SQL Select
【发布时间】:2016-11-22 13:06:28
【问题描述】:

我正在尝试根据其他列的值获取列 fpo 的值。结果与查询中的CASE 语句不符。有人能给我指明一个好的方向吗?

   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)

结果:

【问题讨论】:

  • 你在哪里定义你的变量?据我所知,您不能在 SELECT 语句中进行更新。
  • 您是在尝试持续更新表,还是只需要在NULL 的情况下使用默认值? SELECT 读取到,SET 想要更改一个值。为此,您需要UPDATE。请描述您的需求。
  • 在某些条件下只需要默认值。抱歉,我没有正确指定。我更新了主要问题。

标签: sql sql-server select set case


【解决方案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)

【讨论】:

  • 试过了。不工作。我认为 CASE 不能正确评估 IS NOT NULL 。更奇怪的是它对 IS NULL 也不起作用,应该起作用。第二个 WHEN 也不做任何事情,尽管符合标准。
  • 不,is not nullcase 表达式中工作正确
  • 创建临时表,用测试数据填充它,更正您对该数据的查询,并在您的问题中发布此代码并给出预期结果。
  • 我用您提供的代码添加了查询的输出。可以看到,虽然满足第二个条件,但fpo列并没有显示出预期的结果。
  • 第二个条件现在可以正常工作了!但是第一个条件仍然输出空白,尽管条件已经满足。通过第二次捕获查看我编辑的问题。
猜你喜欢
  • 1970-01-01
  • 2011-01-28
  • 2018-10-06
  • 2012-11-09
  • 1970-01-01
  • 1970-01-01
  • 2017-07-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多