2017-06-27 12 views
0

SQLを使用して異なるキーで2つの行を作成する必要があります。私はこれを達成することができませんでした。Teradata - 1つから2つの行を作成

私は2つに分ける必要がある要素が1つあります。

  • GAAP:親に何か常に等しくなければならない(特別な処理)
  • :それは 会社のA、B、C、またはD
  • 法定であるときにのみ、特別な処理が取り込まれるべき

case文のために私の現在のコードが機能しません。それがA、B、C、Dの場合は正しく割り当てられますが、2番目のものは正しく割り当てられません。それは他の企業だけを拾う。

SELECT 
    CASE 
    WHEN (AB.DATA_ELEMENT_BUSINESS_NME = 'Special Handling' AND AB.UNIT_COMPANY_NME IN ('A','B','C','D')) THEN 'GAAP Special Handling' 
    WHEN AB.DATA_ELEMENT_BUSINESS_NME = 'Special Handling' THEN 'Statutory Special Handling' 
    ELSE AB.DATA_ELEMENT_BUSINESS_NME 
END AS DATA_ELEMENT_BUSINESS_NME, 
sum(AB.DATA_ELEMENT_AMT) as DATA_ELEMENT_AMT 
FROM 

ご意見はありますか?

更新

INデータ:OUT特別な処理-3727286.720000

データ: GAAP特別-3727286.720000

法定特別の取り扱い単一ため-3727286.720000

+0

あなたの要件について詳しく説明する必要があり、あなたのケースは、私にはOKに見えます。いくつかのサンプルデータと期待される結果を表示できますか? – dnoeth

+0

CASE文は、最初の条件が満たされたときの処理を停止します。これまでのものよりも詳細な詳細データを提供する必要があります。 –

答えて

0

の取り扱い2つの出力レコードが必要です。ここで欠落している基本的な考え方は、あなたがそこに置くロジックがどれくらいあるかということです。このような単一のクエリは、単一の入力レコードに対して1つの出力レコードを与えることになります。あなたが必要なもの

が労働組合である:

SELECT 
    'GAAP Special Handling' AS DATA_ELEMENT_BUSINESS_NME, 
    sum(AB.DATA_ELEMENT_AMT) as DATA_ELEMENT_AMT 
FROM YOUR_TABLE 
WHERE 
    AB.DATA_ELEMENT_BUSINESS_NME = 'Special Handling' AND 
    AB.UNIT_COMPANY_NME IN ('A','B','C','D') 

UNION ALL 

SELECT 
    CASE WHEN AB.DATA_ELEMENT_BUSINESS_NME = 'Special Handling' 
     THEN 'Statutory Special Handling' 
     ELSE AB.DATA_ELEMENT_BUSINESS_NME 
    END AS DATA_ELEMENT_BUSINESS_NME, 
    sum(AB.DATA_ELEMENT_AMT) as DATA_ELEMENT_AMT 
FROM YOUR_TABLE 
+1

DISTINCTの処理を避けるために、 'UNION ALL'を使うのが良いです。 – dnoeth

+0

Union Allを追加するコードを編集しました。ありがとう。 – jacobjonz

関連する問題