【问题标题】:how do I update SQL columns with true or false based data in another column on the same table?如何在同一个表的另一列中使用基于 true 或 false 的数据更新 SQL 列?
【发布时间】:2019-03-19 13:15:11
【问题描述】:

请看附图

我想根据Supplier_Agent 列中的信息更新Supplier & Agent 列的真或假。我该怎么做?

另外,一些记录在Supplier_Agent 列中没有任何信息,因此对于它们来说,Supplier & Agent 列都是FALSE

【问题讨论】:

  • 此表中的一行可以同时是供应商和代理商吗?我怀疑您真正应该做的是为 SupplierType 设置一个列和一个查找表来指示这是哪种类型的供应商。这将是处理此类事情的更好方法。
  • 您的建议听起来更好。我会调查一下。

标签: sql sql-server if-statement sql-update


【解决方案1】:

bit 数据类型中创建您的代理和供应商列,然后进行更新

 update t
  set supplier=case when Supplier_Agent='Supplier'  then 1 else 0 end,
   agent =case when Supplier_Agent='Agent'  then 1 else 0 end

在 sql server 中没有布尔数据类型,所以 0 表示 false,1 表示 true

【讨论】:

    【解决方案2】:

    使用case when

    update dbo.SuppliersNPD
    set supplier= case when supplier_aggent='supplier' then 1 else 0 end,
    agent= case when supplier_aggent='agent' then 1 else 0 end
    

    【讨论】:

    • 不知道为什么会有这么多赞成票。 case 表达式是正确的方法,但在 t-sql 中没有真/假之类的东西。这通常使用位数据类型和 1/0 来处理。
    【解决方案3】:

    您应该使用case when 函数,这样您就可以设置检查特定条件的值。

    update SNPD
    set SNPD.supplier= case when SNPD.Supplier_Agent='Supplier' then 1 else 0 
    end,
    SNPD.Agent= case when SNPD.Supplier_Agent='Agent' then 1 else 0 end 
    FROM SuppliersNPD as SNPD
    

    我还建议您使用枚举而不是“供应商”和“代理”来识别供应商的类型。例如,您可以创建一个名为Type 的列,并为供应商使用代码100,为代理使用代码200。这看起来更复杂,但使表格更易于维护,并且经常用于 ERP 软件中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-10
      • 2015-07-30
      • 1970-01-01
      • 1970-01-01
      • 2013-09-05
      • 2011-12-16
      相关资源
      最近更新 更多