2015-07-10 115 views
2

內重複使用VAR我做follwoing例如爲:MS SQL服務器:將值分配給變量和查詢

SELECT name1, name2, left(name1,2) + '_' + left(name2,2), ID, ID + left(name1,2) + '_' + left(name2,2) 

from person 

所以left(name1,2) + '_' + left(name2,2)用1倍以上。有什麼辦法可以做得更好嗎?我有問題,我必須調用相同的功能鏈10 - 15次。

其他例如:

我的一些疑問,我需要用一個子查詢

例如獲得價值

Select name, (Select something from some_table where X=Y) , age from person 

在某些情況下,我需要從子查詢返回的不同列也值了。

例如

Select name, (Select something from some_table where X=Y) , age, 
left((Select something from some_table where X=Y),2) as Test 

from person 

必須有一個更簡單的方法......對吧?

+0

那麼這是一個有點亂肯定。但SQL Server不會執行兩次子查詢。通常他會決定兩個子選擇都會返回相同的結果,並重新使用這兩個操作的結果。 – Ionic

+0

你可以將你的SELECT封裝在CTE中,並提供別名。這些喲可能在後者中使用 – Shnugo

+0

在你的第一個例子中,你的表結構似乎是真正的問題。但是如果您發現自己需要使用列的連接部分,則可以查看計算列。它使這種事情更容易處理。 –

回答

0

您可以使用外適用於重複使用代碼,像這樣的東西:

Select p.name, x.something, p.age, left(x.something,2) as Test 
from person p 
outer apply (
    Select something from some_table s where s.X=p.Y 
) x