Teradata - 从一个创建两行

时间:2017-06-27 13:59:55

标签: teradata

我需要使用SQL创建两个具有不同键的行。我一直无法做到这一点。

我有一个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

数据输出:GAAP特殊处理-3727286.720000

法定特别处理-3727286.720000

1 个答案:

答案 0 :(得分: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