簡體   English   中英

來自子查詢的SQL別名返回?

[英]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. SELECT字旁邊的第2行
  2. ')'附近的第2行
  3. 字詞AS附近的第9行

我知道子查詢僅返回1個字符串(無論如何都將僅返回1個字符串)。

在添加子查詢之前,它已經奏效,因此一定會使它混亂。

編輯:澄清一下,我想從“東西”中打印值,但列的名稱應該是我的子查詢返回的內容,而不是相反的=)

第二次編輯:

好的,假設我有兩個表: myTable1myTable2

這是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;

問題后編輯

普通選擇中不能包含動態列名。 確實沒有任何意義,因為現在您的返回數據集取決於子查詢而有所不同。

您可以使用以下一種

  • 動態SQL以使用所需別名構建查詢
  • 添加一個額外的列作為列名

例:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM