2017-06-27 39 views
0

我需要使用SQL創建具有不同鍵的兩行。我一直無法做到這一點。Teradata - 從一個創建兩行

我有一個ELEMENT需要分成兩部分。

  • GAAP:應該只以特殊處理來填充當它在 公司A,B,C或D.
  • 法定:應該始終等於什麼是父(特殊處理)

由於case語句,我的當前代碼不起作用。如果它在A,B,C,D中,那麼它被正確分配,但第二個不正確。它只提取其他公司。

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 

有什麼建議嗎?

更新

數據:特殊處理-3727286.720000

數據OUT: GAAP特殊處理-3727286.720000

法定特殊處理-3727286.720000

+0

您需要詳細說明你的要求,你的情況看起來不錯給我。你能展示一些示例數據和預期結果嗎? – dnoeth

+0

CASE語句停止滿足第一個條件的處理。您需要提供比迄今爲止更多的示例詳細數據。 –

回答

0

對於單輸入記錄,您期待兩個輸出記錄。這裏缺少的基本思想是,你在那裏放置了多少邏輯,像這樣的單個查詢將爲單個輸入記錄提供單個輸出記錄。

你需要的是一個聯盟:

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

更好地使用'UNION ALL'來避免DISTINCT處理。 – dnoeth

+0

修改了添加Union All的代碼。謝謝。 – jacobjonz

相關問題