我有一个这个程序(简化):
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个字符串。)
在我添加子查询之前它已经工作了,所以必须要弄乱它。
编辑:为了澄清,我想打印“stuff”中的值,但列的名称应该是我的子查询返回的,而不是相反的方式=)
第二次编辑:
好的,我要说我有表格: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 |
答案 0 :(得分:3)
应该是这样的:
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);
喜欢这个:
答案 1 :(得分:3)
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;