SQL从同一个表中的不同行中选择多个变量的值

时间:2016-10-11 09:46:16

标签: sql tsql

我的表格结构如下:

|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')

1 个答案:

答案 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列不重复