2016-05-03 21 views
0

私は新しい変数DATE_YEARを参照しようとしていますが、元のDATE_YEARは私のTeradataデータベースTESTにあります。 どうすれば入手できますか? Teradataのドキュメントで何も見つかりませんでした。ソーステーブルの同じ名前の名前の変更された変数を参照してください

SELECT DATE_YEAR+1 AS DATE_YEAR, COUNT(1) 
FROM TEST 
WHERE DATE_YEAR = 2016 GROUP BY 1; 
+0

WHERE DATE_YEAR + 1 = 2016 GROUPを。 –

+0

この場合、私はこれを行うことができますが、保守性のために新しい名前を使用するために、より多くのロジック( 'case when'、OLAP functions ...)を持つ他の変数があります。 – Misanjo

+0

それからあなたは@ jarlhの答えを持っています –

答えて

2

標準SQLに基づき、SELECTリスト内の列は、WHERE/GROUP BY/HAVING/OLAP/FROM後を作成したが、前ORDER BYています。

Teradataではどこでもエイリアスを再利用できるため、&を貼り付けたりネストしたSELECTを使用したりする必要がないため、非常に便利です。しかし、いくつかの有効範囲規則があります。列名が見つからない場合にのみ、別名リストで検索されます。だから、親指の大まかなルールは次のとおりです。は、既存の列名と一致して、あなたが簡単に任意の場所でそれを使用することができますエイリアス割り当てることはありません:1 BY

SELECT DATE_YEAR+1 AS DATE_YR, COUNT(1) 
FROM TEST 
WHERE DATE_YR = 2016 GROUP BY 1; 
+0

ありがとう、私は推測するいくつかの呼び出しをする必要があります... – Misanjo

0

派生テーブルでそれをラップ:

select DATE_YEAR_ADJUSTED, count(*) 
from 
(
    SELECT DATE_YEAR+1 AS DATE_YEAR_ADJUSTED 
    FROM TEST 
) as dt 
WHERE DATE_YEAR_ADJUSTED = 2016 
GROUP BY DATE_YEAR_ADJUSTED 

をGROUP BYが...わずか1年とにかくあまり意味がありません。

PS。私はTeradataを知らないが、これがうまくいくと思う。 ANSI SQL。あなただけがORDERにエイリアスを使用できるように

+0

はい、節はあまり意味がありません。カウントは2016の値を例として示しています。 – Misanjo

+0

名前を明確にするために列の名前が変更されました。 – jarlh

+0

これは旧式のコードですが、私はあなたの解決策を進めようとします – Misanjo

関連する問題