繁体   English   中英

来自子查询的SQL别名返回?

[英]SQL alias from subquery return?

我有一个此过程(简化):

CREATE PROCEDURE myProcedure
    @var1 int,
    @var2 NVARCHAR(50),
    @var3 NVARCHAR(50),
    @var4 NVARCHAR(50)  
AS
BEGIN
   SELECT 
       stuff AS (SELECT date FROM dateTable WHERE condition), 
       otherStuff
       moreStuff
   FROM
       myTable
   WHERE
       myConditions;
END

它说我在两个地方的语法不正确:

  1. SELECT字旁边的第2行
  2. ')'附近的第2行
  3. 字词AS附近的第9行

我知道子查询仅返回1个字符串(无论如何都将仅返回1个字符串)。

在添加子查询之前,它已经奏效,因此一定会使它混乱。

编辑:澄清一下,我想从“东西”中打印值,但列的名称应该是我的子查询返回的内容,而不是相反的=)

第二次编辑:

好的,假设我有两个表: myTable1myTable2

这是myTable1

| stuff | otherStuff | otherStuff |
|   x   |    x       |    x       |
|   x   |    x       |    x       |
             ...

这是myTable2

| date  | id |
| x/x/x | 1  |
| x/x/x | 2  | 
     ...

这是我希望我的SELECT返回的内容:

| x/x/x | otherStuff | otherStuff |
|   x   |    x       |    x       |
|   x   |    x       |    x       |

应该是这样的:

  SELECT 
       (SELECT date FROM dateTable WHERE condition) AS stuff , 
       otherStuff
       moreStuff
   FROM
       myTable
   WHERE
       myConditions;

别名应位于相关子查询之后,假设此子查询仅返回一个值。

另一种语法是这样写的:

  SELECT 
       stuff = (SELECT date FROM dateTable WHERE condition), 
       otherStuff
       moreStuff
   FROM
       myTable
   WHERE
       myConditions;

更新资料

正如@gbn在他的回答中所说,您必须使用动态SQL来进行操作,这实际上没有任何意义,但是如果您想以任何方式这样做,则可以执行以下操作:

DECLARE @columnname VARCHAR(20);
DECLARE @query VARCHAR(2000);

SELECT @columnname =  QUOTENAME([date]) FROM dateTable;


SELECT @query = 'SELECT (SELECT date FROM dateTable) AS' +  @columnname + 
                 ' , otherStuff, moreStuff FROM myTable';

execute(@query);

就像这样:

Alias在或=之前使用AS

SELECT 
   stuff = (SELECT date FROM dateTable WHERE condition), 
   otherStuff
   moreStuff
FROM
   myTable
WHERE
   myConditions;

SELECT 
   (SELECT date FROM dateTable WHERE condition) AS stuff, 
   otherStuff
   moreStuff
FROM
   myTable
WHERE
   myConditions;

问题后编辑

普通选择中不能包含动态列名。 确实没有任何意义,因为现在您的返回数据集取决于子查询而有所不同。

您可以使用以下一种

  • 动态SQL以使用所需别名构建查询
  • 添加一个额外的列作为列名

例:

SELECT 
   (SELECT date FROM dateTable WHERE condition) AS StuffColumnName, 
   stuff,
   otherStuff
   moreStuff
FROM
   myTable
WHERE
   myConditions;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM