子查询返回的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打印在子查询返回后命名的列下