Sql server MS SQL Server:为变量赋值并在查询中重用变量
我正在做以下工作,例如:Sql server MS SQL Server:为变量赋值并在查询中重用变量,sql-server,variables,select,Sql Server,Variables,Select,我正在做以下工作,例如: 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)被多次使用。我有没有办法做得更好。我有查询,我必须调用相同的功能链10-15次 其他例子: 我需要使用子查询获取一些查询值 e、 g 在某些情况下,我还需要从不同列的子查询返回
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)
被多次使用。我有没有办法做得更好。我有查询,我必须调用相同的功能链10-15次
其他例子:
我需要使用子查询获取一些查询值
e、 g
在某些情况下,我还需要从不同列的子查询返回的值
e、 g
必须有一种更简单的方法…对吗?您可以使用外部应用来重用代码,如下所示:
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
嗯,有点乱是的。但是SQL Server不会执行子选择两次。通常情况下,他会决定两个子选择返回相同的结果,并对两个操作重复使用结果。您可以将SELECT包装在CTE中,并提供语音别名。在你的第一个例子中,似乎你的表结构才是真正的问题。但如果您发现自己需要使用列的连接部分,您可以查看计算列。这使得这类事情更容易处理。
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
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