2016-10-11 26 views
1

選擇的值到不同的行多個變量我有一個結構類似這樣的表:SQL在同一個表

|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

哪個DBMS您使用的是T.Country列不重複? (該代碼看起來不像ANSI SQL。) – jarlh

+0

看起來像T-SQL(MS-SQL-Server) – MatBailie

+0

這兩種方法都可以工作,但如果價格返回多於一個value.You可以加入這個表格,而不是分配變量 – TheGameiswar

回答

2

我不會與需要爲每個效率不高

這裏變量單個表命中第一種方法去是實現正確的方法目標使用你的第二種方法。您需要在您的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') 

考慮

+0

爲了OP的好處;不在'ELSE'中創建一個* implicit *'ELSE NULL'。然後'NULL'在MAX()中總是被視爲「最後」。 – MatBailie

+0

@MatBailie - 添加到解決方案 –