【问题标题】:SQL Select value as (Subquery)SQL 选择值作为(子查询)
【发布时间】:2015-11-11 16:16:04
【问题描述】:

这是我正在尝试使用的查询,但出现语法错误。

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

我是自学成才的,还没有发现任何明确说明无法做到这一点的东西,但如果是这样,那么感谢关闭。

【问题讨论】:

  • 问题是:你想做什么?请添加您的表结构、示例数据和预期输出。
  • 澄清一下 - 您是否尝试使用子查询(来自 Table2.Value2)在 Table1 中为 Column1 创建别名?
  • 如果你想要变量列名你需要动态sql
  • 它在几个层面上都失败了。选择 Values2 不能保证返回一个值,并且您不能将变量(或选择)用于表名、列名或别名。正如小伙子所说,您需要使用动态 SQL。但这只是奇怪的查询。你想做什么?
  • @Jamiec 是的,这就是我想要做的。

标签: sql-server


【解决方案1】:

您不能使用从子查询返回的值作为别名,没有办法使它起作用。

您唯一的选择是动态构建 sql,并使用 sp_executesql,但这通常表明其他地方出了问题!

从获得你想要的价值开始,几个点

  • 使用TOP 1 或适当的过滤条件,确保您只获得 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

但是,我强调,这是一个糟糕的解决方案。

【讨论】:

  • 别傻了,但为什么会这样呢?只是想进一步教育自己。
  • 这不是一个愚蠢的问题,但回答起来很长,尤其是在评论中。阅读:stackoverflow.com/questions/317725/… 开始
  • 如果你想要一个规范的答案,试试这个:sommarskog.se/dynamic_sql.html(警告:长)
  • 我知道你说这是一个糟糕的解决方案,但我正在尝试从任何地方开始。我把它放进去,你给出的第一个语句工作正常,但第二个语句抛出语法错误。我知道你不是来指导我的,但如果我能再打扰你一次,我将不胜感激。
  • @TechProjCoord 如果你告诉我语法错误是什么会有帮助吗?
【解决方案2】:

试试

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

【讨论】:

  • 这没有多大意义,你实际上并没有从Table1中选择任何东西
  • 问题不在于它是否有意义……这就是用户提出的问题的答案。他必须决定这是否有意义。问题 --> 回答
猜你喜欢
  • 2021-07-23
  • 1970-01-01
  • 2016-01-26
  • 1970-01-01
  • 2019-04-04
  • 1970-01-01
  • 1970-01-01
  • 2014-06-08
  • 2015-08-01
相关资源
最近更新 更多