2015-11-11 85 views
-2

这是我试图去工作的查询,但我得到一个语法错误。SQL Select value as(Subquery)

SELECT Column1 as (SELECT Value2 from Table2 Where ConditionA, ConditionB, ConditionC) 
from Table1 

我是自学的,并没有发现任何明确地说,这不能做,但如果是这样的话,那么感谢关闭。

+1

问题是:你想要做什么?请添加您的表格结构,示例数据和预期输出。 –

+2

只是为了澄清 - 你是否试图使用子查询(来自'Table2.Value2')为'Table1'中的'Column1'创建一个别名? – Jamiec

+1

如果您想要变量列名称,您需要动态sql – lad2025

回答

-2

尝试

SELECT (SELECT Value2 from Table2 Where ConditionA, ConditionB, ConditionC) Column1 from Table1 
+1

这没有多大意义,你实际上没有选择'Table1'中的任何东西 – Jamiec

+0

这将颠倒内容及其别名... – CactusCake

+0

问题不在于它是否有意义......这是用户问题的答案。他必须决定是否有意义。问题 - >回答 – cboden

0

不能使用从一个别名的子查询返回的值,也没有办法,使这项工作。

您唯一的选择是动态构建sql,并使用sp_executesql,但那通常表明其他问题已经出错!

开始通过获取你想要的值,几个百分点的

  • 确保你只得到1分的结果,或者使用TOP 1或适当的过滤条件
  • 多个条件与ANDOR,不分开逗号

    declare @alias NVARCHAR(100) -- whatever is appropriate 
    SELECT TOP 1 @alias = value2 FROM Table2 
    WHERE someField = 'some value' 
    

Ť母鸡动态建立sql,并执行它。

DECLARE @sql NVARCHAR(100) = 'SELECT Column1 AS ' + @alias + ' FROM Table1' 
EXEC sp_executesql @sql 

您可以在这里看到这些内容起作用:http://sqlfiddle.com/#!3/71f8d6/3

但是,我要强调,这是一个不好的解决

+0

不是愚蠢的,但为什么这是坏的?只是想进一步教育自己。 – TechProjCoord

+0

这不是一个愚蠢的问题,但它是一个很长的回答,特别是在评论中。阅读:http://stackoverflow.com/questions/317725/is-a-dynamic-sql-stored-procedure-a-bad-thing-for-lots-of-records开始 – Jamiec

+0

如果你是一个规范回答,试试这个:http://www.sommarskog.se/dynamic_sql。HTML(警告:长) – Jamiec