2016-12-30 9 views
-2

これは適切なエイリアスを適用する際の問題であると確信しています。どこが間違っているのか分かりません。ネストされたサブクエリのユニオンから選択する

No column name was specified for column 1 of 'Z'

:それはエラーがスローされます(上図のように)それからSELECT文をしようとしたときに機能し、完全自体によって

Select Z.DesiredResult1, etc... 
from (
    Select C.columns 
     from (
     Select B.columns 
      from (
       Select A.columns 
       from (Subquery) as A 
      ) as B 
     ) as C 
    Where C.condition = 1 
    UNION 
    Select F.columns 
     from (
     Select E.columns 
      from (
       Select D.columns 
       from (Subquery) as D 
      ) as E 
     ) as F 
    Where F.condition = 2 
) as Z 

組合が、しかし:私は、SQLServerの中で、次のUNIONで探していますSQLの初心者を助けてくれてありがとうと思います。

編集:解決済み - エラーが誤解されました。問題は、サブクエリ全体ではなくエイリアスが必要な集約関数でした。名前のない集約カラムを残しておけば、組合だけでうまく働いたので、私はそれを考慮しませんでした。読んでいただきありがとうございます。

+0

F、C。またZ. – GurV

+0

でノー 'DesiredResult1'には' condition'列が存在しない、目的は何をやっている何をしているのですか? – GurV

+1

完全な列リストを追加する必要があります。あなたのエラーはそこにあります。 – Sefe

答えて

0

このエラーは簡単に再現できます。それを確認してくださいhere

あなたは、単一のUNIONで

SELECT * 
FROM (SELECT 'A','B') T1 
UNION 
SELECT * 
FROM (SELECT 'C','D') T2 

を列に名前を付けない場合は、同じエラーを取得します:

No column name was specified for column 1 of 'T1'.

No column name was specified for column 2 of 'T1'.

No column name was specified for column 1 of 'T2'.

No column name was specified for column 2 of 'T2'.

を単純に同じ名前を持つ各共通の列に名前を付けます。

SELECT T3.Result1, T3.Result2 
FROM 
    (SELECT * 
    FROM (SELECT 'A' Result1, 'B' Result2) T1 
    UNION 
    SELECT * 
    FROM (SELECT 'C' Result1, 'D' Result2) T2) T3 

+----+---------+---------+ 
| | Result1 | Result2 | 
+----+---------+---------+ 
| 1 | A | B | 
+----+---------+---------+ 
| 2 | C | D | 
+----+---------+---------+ 
関連する問題