[英]Select values from different rows of same column INTO multiple variables in Oracle SQL
[英]SQL select values into multiple variables from different rows in same table
我有一个结构如下的表:
|ROWID |COUNTRY|PRICE|
|1 |US |15|
|1 |UK |10|
|1 |EU |12|
我需要从多个行中将值选择为变量,以在整个存储过程中使用,这样做是这样的:
DECLARE @USprice int,@UKprice int
SELECT @USprice = T.Price FROM Table T WHERE T.Country = 'US'
SELECT @UKprice = T.Price FROM Table T WHERE T.Country = 'UK'
问题是运行此select的最快方法是什么? 实际上,我需要获得十几行信息,因此需要关注性能。
这样做会更好吗:
DECLARE @USprice int,@UKprice int
SELECT @USprice = CASE WHEN T.Country = 'US' THEN T.Price ELSE @USprice END
,@UKprice = CASE WHEN T.Country = 'UK' THEN T.Price ELSE @UKprice END
FROM Table T WHERE T.Country IN ('US','UK')
我不会采用第一种方法,该方法要求为每个变量单独命中表,这效率不高
这是使用第二种方法实现目标的正确方法 。 您需要在case
语句的顶部添加Min/Max
聚合。
DECLARE @USprice INT,
@UKprice INT
SELECT @USprice = Max(CASE WHEN T.Country = 'US' THEN T.Price ELSE NULL END),
@UKprice = Max(CASE WHEN T.Country = 'UK' THEN T.Price ELSE NULL END)
FROM Table T
WHERE T.Country IN ( 'US', 'UK' )
考虑到T.Country
列不重复
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.