[英]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.