子查询返回的SQL别名?

子查询返回的SQL别名?,sql,stored-procedures,subquery,Sql,Stored Procedures,Subquery,我有一个简化的程序: 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 F

我有一个简化的程序:

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
它说我在两个地方有不正确的语法:

第2行靠近单词SELECT 2号线附近 第9行靠近单词AS 我知道子查询只返回1个字符串,并且无论发生什么情况,都只返回1个字符串

在我添加子查询之前,它就工作了,所以一定是有什么东西把它搞乱了

编辑:为了澄清,我想打印stuff中的值,但列的名称应该是我的子查询返回的名称,而不是相反=

第二次编辑:

好的,假设我有表:myTable1和myTable2

这是我的表1:

这是我的表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;
别名应该在相关子查询之后,这是假设该子查询只返回一个值

另一种语法是这样写的:

  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);
像这样:

应该是这样的:

  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;
别名应该在相关子查询之后,这是假设该子查询只返回一个值

另一种语法是这样写的:

  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);
像这样:

别名使用AS after或=before

问题编辑后 在普通select中不能有动态列名。这实际上毫无意义,因为现在返回的数据集因子查询而异

你可以用其中一个

使用所需别名生成查询的动态SQL 添加一个用作列名的额外列 例如:

SELECT 
   (SELECT date FROM dateTable WHERE condition) AS StuffColumnName, 
   stuff,
   otherStuff
   moreStuff
FROM
   myTable
WHERE
   myConditions;
别名使用AS after或=before

问题编辑后 在普通select中不能有动态列名。这实际上毫无意义,因为现在返回的数据集因子查询而异

你可以用其中一个

使用所需别名生成查询的动态SQL 添加一个用作列名的额外列 例如:

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

是的,但我希望myTable.stuff打印在子查询后命名的列下-return@Litari什么意思?不清楚您想要什么,能否显示两个表中的一些示例数据和所需的输出?是的,但我希望myTable.stuff打印在子查询后面的列下-return@Litari什么意思?不清楚您想要什么,能否显示两个表中的一些示例数据和所需的输出?您希望别名为条件返回的日期表中的选择日期?您希望别名为条件返回的日期表中的选择日期?是,但我希望myTable.stuff打印在子查询返回后命名的列Yea下,但我希望myTable.stuff打印在子查询返回后命名的列下