我有以下声明:
Select No, Region = 'Ohio'
FROM table
where PostCode >='0001'
AND PostCode <= '4999'
使用字段Region中的正确状态更新表。如何在同一语句中使用其他几个WHERE条件扩展该语句?
e.g。
Region = 'NewYork'
Where PostCode >='5000'
AND PostCode <= '7999'
我的解决方案是为每个地区建立几个声明,但必须有更好的方法将它们合二为一。
答案 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