[英]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个字符串(无论如何都将仅返回1个字符串)。
在添加子查询之前,它已经奏效,因此一定会使它混乱。
编辑:澄清一下,我想从“东西”中打印值,但列的名称应该是我的子查询返回的内容,而不是相反的=)
第二次编辑:
好的,假设我有两个表: myTable1
和myTable2
。
这是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;
普通选择中不能包含动态列名。 确实没有任何意义,因为现在您的返回数据集取决于子查询而有所不同。
您可以使用以下一种
例:
SELECT
(SELECT date FROM dateTable WHERE condition) AS StuffColumnName,
stuff,
otherStuff
moreStuff
FROM
myTable
WHERE
myConditions;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.