2015-07-10 42 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