[英]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.