我的表格结构如下:
|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'
问题是运行此选择的最快方法是什么?实际上我需要大约十几行,所以关心性能。
这样做会更好:
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')
答案 0 :(得分:2)
我不会采用第一种方法,这种方法需要针对每个变量进行单独的表命中
以下是使用第二种方法实现目标的正确方法。您需要在Min/Max
声明之上添加case
汇总。
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
列不重复