SQL Server连接多个选择

时间:2017-12-21 15:22:12

标签: sql sql-server select

我有以下声明:

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

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

e.g。

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

我的解决方案是为每个地区建立几个声明,但必须有更好的方法将它们合二为一。

2 个答案:

答案 0 :(得分:1)

在单个查询中基于多个条件选择/设置不同值的两种常用方法是this.getEvents.getAvailability(); 语句,并在具有这些值的另一个表上执行case。我还应该指出,您可以充分利用SQL Server中的join运算符。

单个查询中的CASE语句
如果您有一小组条件,或者只需要将特殊查询放在一起,则case语句可能很有用。以下是使用case语句的示例:

between

使用值和条件加入表格
这绝对是评估50个州的更好方法 - 特别是因为这些数据可能是静态的。我们的想法是,您希望拥有一个包含条件和值的表,然后将其连接到表中。

以下是使用临时表的示例 - 您可能希望使用真实表来表示与状态一样常见的东西。

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

请注意,在上面的查询中,如果未设置状态,我会对#states执行左外连接。我还使用-- 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) 选择状态,以防外连接不为my_table中的特定行返回任何内容。

答案 1 :(得分:0)

您可以使用区域上的case语句创建计算字段。如果有很多&#34;未知&#34;返回的记录然后您可能需要调整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