繁体   English   中英

SQL Server连接多个选择

[英]SQL Server connecting several Selects

我有以下声明:

Select No, Region = 'Ohio'
FROM table
where PostCode >='0001'
AND PostCode <= '4999'

这将以区域Region中正确的状态更新表。 如何在同一条语句中使用其他几个WHERE条件扩展该条语句?

例如

Region = 'NewYork'
Where PostCode >='5000'
AND PostCode <= '7999'

我的解决方案是为每个地区构建多个声明,但是必须有一种更好的方式将它们全部合而为一。

两种常见的方式来选择基于在单个查询多个标准/设置不同的值case发言,做一个join上使用这些值的另一个表。 我还应该指出,您可以在大多数情况下利用SQL Server中的between操作符。


单个查询中的CASE语句
如果您有少量条件,或者只需要将临时查询组合在一起,则case语句可能会很有用。 这是一个使用case语句的示例:

select
    No,
    Region = case
        when (PostCode >= '0001' and PostCode <= '4999')
            'Ohio'
        when (PostCode between '5000' and '7999')
            'NewYork'
        else
            'Unknown'
        end
from [...]

联接具有值和条件的表
对于评估50个状态,这绝对是更好的方法-尤其是因为此数据可能是静态的。 这样的想法是,您将需要一个包含条件和值的表,然后将其连接到该表。

这是使用临时表的示例-您可能希望将真实表用于与状态相同的内容。

-- Setup a #states table
create table #states (state varchar(20), PostCodeMin char(4), PostCodeMax char(4))
insert into #states values ('Ohio', '0001', '4999')
insert into #states values ('NewYork', '5000', '7999')

-- Now query it
select
    t.No,
    State = isnull(s.state, 'Unknown')
from
    my_table t
    left outer join #states s
        on (t.PostCode between s.PostCodeMin and s.PostCodeMax)

请注意,在上面的查询中,如果未设置状态,则对#states进行左外部连接。 我还使用isnull选择状态,以防外部isnull不为my_table中的特定行返回任何内容。

您可以使用区域上的case语句创建一个计算字段。 如果将返回许多“未知”记录,则您可能需要调整WHERE子句以过滤掉不必要的记录,以提高性能。

SELECT
    *
FROM
(
    Select 
        No, 
        Region = 
            CASE 
                WHEN PostCode >'0001' AND PostCode <='4999' THEN 'Ohio'
                WHEN PostCode >'5000' AND PostCode <='7999' THEN 'New York'
            ELSE
                'Unknown'
            END
    FROM table
    where PostCode >='0001' AND PostCode <= '7999'
)AS X
ORDER BY
    Region

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM