Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 是否可以根据以前的列大小写选择列_Sql_Sql Server 2008_Tsql - Fatal编程技术网

Sql 是否可以根据以前的列大小写选择列

Sql 是否可以根据以前的列大小写选择列,sql,sql-server-2008,tsql,Sql,Sql Server 2008,Tsql,我需要根据客户的邮政编码将他们分为3组 在客户数据库中,有两个字段可以包含邮政编码 街道地址Zip是主要地址,如果用户没有为街道地址输入Zip,则使用邮政地址 有时两者都为空,可能输入了非法值 因此,我首先需要用一个案例陈述来说明: 案例 当streetAddress.zip不为NULL且streetAddress.zip介于“0”和“99999”之间时,则streetAddress.zip 当postalAddress.zip不为NULL且postalAddress.zip介于“0”和“999

我需要根据客户的邮政编码将他们分为3组

在客户数据库中,有两个字段可以包含邮政编码

街道地址Zip是主要地址,如果用户没有为街道地址输入Zip,则使用邮政地址

有时两者都为空,可能输入了非法值

因此,我首先需要用一个案例陈述来说明:

案例 当streetAddress.zip不为NULL且streetAddress.zip介于“0”和“99999”之间时,则streetAddress.zip 当postalAddress.zip不为NULL且postalAddress.zip介于“0”和“99999”之间时,则postalAddress.zip else空端 )“邮政编码”

但现在我想在下一列中根据“PostCode”进行选择,但似乎无法使用上一列中的值

糟糕的 案例 当邮政编码介于“00000”和“33333”之间时,则为“Zone1” 当邮政编码介于“33334”和“66666”之间时,则为“Zone2” 当邮政编码介于“66669”和“99999”之间时,则为“Zone3” 结束


最后,我尝试创建一个视图,该视图将保存邮政编码和区域值。

为什么不使用子查询

select . . .
from (select c.*,
             (case when streetAddress.zip IS not NULL and streetAddress.zip between '0' and '99999'
                   then streetAddress.zip
                   when postalAddress.zip IS not NULL and postalAddress.zip between '0' and '99999'
                   then postalAddress.zip
                   else NULL
              end) as PostCode
      from . . .
     ) c

您可以使用外部
选择中的
邮政编码列

如果要在一次查询中重复第一个案例中的所有代码,但是您可以使用CTE选择第一种情况下的所有数据,然后选择其中的所有数据并应用第二种情况。

如果您希望在单个查询中使用所有数据,请尝试重用case语句,sql如下所示 也可以使用子查询

select 
(case 
    when streetAddress.zip IS not NULL and streetAddress.zip between '0' and '99999' then streetAddress.zip 
    when streetAddress.zip IS NULL and postalAddress.zip IS not NULL and postalAddress.zip between '0' and '99999' then postalAddress.zip 
    else NULL 
 end ) AS [PostCode],
 (case 
    when streetAddress.zip IS not NULL and streetAddress.zip between '0' and '99999' then 
    <GroupA: Your Logic to get the column based on the value 'streetAddress.zip'>
    when streetAddress.zip IS NULL and postalAddress.zip IS not NULL and postalAddress.zip between '0' and '99999' then
    <GroupB: Your Logic to get the column based on the value 'postalAddress.zip'>
    else <GroupC:>
 end ) AS [PostCodeDependentColumn]
 From ....
选择
(案例
当streetAddress.zip不为NULL且streetAddress.zip介于“0”和“99999”之间时,则streetAddress.zip
当streetAddress.zip为NULL且postalAddress.zip不为NULL且postalAddress.zip介于“0”和“99999”之间时,则postalAddress.zip
否则无效
完)作为[邮政编码],
(案例
当streetAddress.zip不为NULL且streetAddress.zip介于“0”和“99999”之间时,则
当streetAddress.zip为NULL且postalAddress.zip不为NULL且postalAddress.zip介于“0”和“99999”之间时,则
其他的
结束)作为[Postcode DependentColumn]
从…起

COALESCE(AddressZip,PostalZip)?旁注:您实际上想要创建一个表(可能还有一个相关的物化视图)来处理zip->zone范围转换。这使得更新变得很简单(无需触摸执行转换的查询),甚至可以完全防止某些类型的配置错误(即重叠范围)。