另一个表列中多个值条件的SQL命令错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了另一个表列中多个值条件的SQL命令错误相关的知识,希望对你有一定的参考价值。

我们要添加一个新列,其值取决于很多条件

例如,像这样的箱号表,有很多箱号引用不同的国家/地区

Start_Bin     End_Bin     Country_Code
---------------------------------------
4976999       4971000     US
4986999       4990000     UK
4920000       4929999     US

并且我们想在表中创建一个新的国家/地区代码列,其条件基于此表

这是我们的SQL代码,SQL Server不允许:(

ALTER TABLE temp.we_are_foreigners__table 
ADD COLUMNS 
    CASE
        WHEN 
           (CAST(temp.we_are_foreigners__table.accountno AS int) 
                >= CAST(temp.visa_country_classify_table.start_binnumber AS int) 
            AND CAST(temp.we_are_foreigners__table.accountno AS int) 
                <= CAST(temp.visa_country_classify_table.end_binnumber AS int) ) 
        THEN temp.visa_country_classify_table.country_code
        WHEN 
            (CAST(temp.we_are_foreigners__table.accountno AS int) 
                >= CAST(temp.mastercard_country_classify_table.start_binnumber AS int) 
            AND CAST(temp.we_are_foreigners__table.accountno AS int) 
                <= CAST(temp.mastercard_country_classify_table.end_binnumber AS int) ) 
        THEN temp.mastercard_country_classify_table.country_code
    END As Country_String
FROM 
    temp.visa_country_classify_table, 
    temp.mastercard_country_classify_table, 
    temp.we_are_foreigners__table
;

执行此操作的正确SQL命令是什么,有什么问题?

答案

您需要从更新中分离出alter table。您还需要指定如何联接表。

这里是一个示例,假定连接条件:

ALTER Table temp.we_are_foreigners__table add Country_String varchar(100)

update f set Country_string= 
    CASE
        WHEN 
        CAST(f.accountno AS int) >= CAST(v.start_binnumber AS int) 
            AND CAST(f.accountno AS int) <= CAST(v.end_binnumber AS int)  
        THEN m.country_code
        WHEN 
            CAST(f AS int) >= CAST(m.start_binnumber AS int) 
            AND CAST(f.accountno AS int) <= CAST(m.end_binnumber AS int) 
        THEN m.country_code
    END 
FROM  temp.we_are_foreigners__table f
join  temp.visa_country_classify_table v on v.countryID=f.CountryID
join  temp.mastercard_country_classify_table m on m.countryID=f.CountryID

以上是关于另一个表列中多个值条件的SQL命令错误的主要内容,如果未能解决你的问题,请参考以下文章

如何在代码中的sql表列中插入默认值

将表列值存储到变量中(SQL Server)

C# SQL:如何为 SQL 表列中的每个不同值启动代码?

在 SQL Server 的表列中使用 UDF 作为默认值

T-SQL 根据另一表列过滤一列上的多个值

从另一个工作表的列中的工作表列中搜索每个值,如果找到,则将整行粘贴到输出中