【问题标题】:How to update one table with data from separate table using conditionals如何使用条件使用来自单独表的数据更新一个表
【发布时间】:2012-07-20 21:09:47
【问题描述】:

这个查询可能非常荒谬,或者我只是有一点小错误。我不太确定。但基本上我正在尝试使用 Access 中另一个表中的数据更新一个表。给我带来问题的列是那些设置为“是/否”类型的列,而我试图更新它的数据设置为“文本”类型,其值为字符串“是”或“否”。

因此,如果可能的话,我对这个查询的想法是将其粗略地将“文本”字段转换为 1 或 0,具体取决于它们的 Yes 或 No 值。无论如何,足够的背景,这是查询:

UPDATE Group_Pricing SET 
Contract_Type = (SELECT Contract_Type FROM ContractTypesFinal WHERE ContractTypesFinal.FirstGroup = Group_Pricing.GroupID), 
Hybrid_Retail =  
(SELECT CASE (SELECT RetailSpread FROM ContractTypesFinal WHERE ContractTypesFinal.FirstGroup = Group_Pricing.GroupID)
CASE "Yes"
RetailSpread = 1
CASE "No"
RetailSpread = 0), 
Hybrid_Mail =  
(SELECT CASE (SELECT MailSpread FROM ContractTypesFinal WHERE ContractTypesFinal.FirstGroup = Group_Pricing.GroupID)
CASE "Yes"
MailSpread = 1
CASE "No"
MailSpread = 0),
Hybrid_Specialty =  
(SELECT CASE (SELECT SpecialtySpread FROM ContractTypesFinal WHERE ContractTypesFinal.FirstGroup = Group_Pricing.GroupID)
CASE "Yes"
SpecialtySpread = 1
CASE "No"
SpecialtySpread = 0),
Hybrid_Rebates =  
(SELECT CASE (SELECT Rebates FROM ContractTypesFinal WHERE ContractTypesFinal.FirstGroup = Group_Pricing.GroupID)
CASE "Yes"
Rebates = 1
CASE "No"
Rebates = 0)
WHERE EXISTS (SELECT 1 FROM ContractTypesFinal WHERE ContractTypesFinal.FirstGroup = Group_Pricing.GroupID);

非常感谢任何帮助。如果这不可能,就告诉我我是个白痴。谢谢!

【问题讨论】:

    标签: sql ms-access sql-update


    【解决方案1】:

    MS Access 中不能有 CASE,可以有 IIf。

    UPDATE Group_Pricing SET 
    Contract_Type = 
         (SELECT Contract_Type 
          FROM ContractTypesFinal 
          WHERE ContractTypesFinal.FirstGroup = Group_Pricing.GroupID), 
    Hybrid_Retail =  
    IIf (SELECT RetailSpread 
         FROM ContractTypesFinal 
         WHERE ContractTypesFinal.FirstGroup = Group_Pricing.GroupID)="Yes",1,0)
    
    <...>
    

    请注意,MS Access 中的 YesNo 是 -1 和 0

    不过,直接说:

    UPDATE table1 SET AYesNo=(AText="Yes")
    

    编辑

    UPDATE Group_Pricing 
    INNER JOIN ContractTypesFinal 
    ON Group_Pricing.GroupID = ContractTypesFinal.FirstGroup 
    SET Hybrid_Retail = (RetailSpread="Yes")
    

    这个(RetailSpread="Yes") 将评估为True (-1)

    【讨论】:

    • 啊,是的。为什么我试图使用 VBA 进行直接查询,我不知道。感谢您为我指明正确的方向。所以是 = -1 和否 = 0?
    • 是的,我错过了。所以你是说使用UPDATE Group_Pricing SET Hybrid_Retail = ((SELECT RetailSpread FROM ContractTypesFinal WHERE ContractTypesFinal.FirstGroup = Group_Pricing.GroupID)="Yes")?我的理解似乎不对。
    • 当字段等于“否”时,这也能处理吗?
    • 只有两个选择,真和不真,所以如果为真,则不为真,反之亦然。也就是说,如果不是Yes,那就是No,你只需要更新Yesses。 %)
    • 感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-28
    • 2018-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多