繁体   English   中英

通过将Oracle中的一列分组将数据从一个表插入到另一个表

[英]Inserting the data from one table to another by grouping one column in Oracle

我有桌子

表格1

LEDGER      SOURCE    CATEGORY    ACCOUNT   DR          CR
-------    --------   ---------  --------  ------      -------
ABC          JS1       JE1         A1     123456.7      2345.6
ABC          JS1       JE2         A1     16.7          345.6
ABC          JS2       JE3         A1     13456.7       10
ABC          JS3       JE4         A2     1456.7        45.6
ABC          JS1       JE2         A2     16            345
ABC          JS3       JE5         A2     2456.7        2.6
ABC          JS1       JE1         A3     156.7         25.6    .........

我想按来源和类别将此数据插入到另一个表(表2)中。

例如,对于源和类别JS1,JE1,我有两行,即表1中帐户A1,A3的行1,7。 但是我想只用一行将数据插入到table2中,如下所示

表:2

LEDGER SOURCE  CATEGORY  DR_A1  CR_A1   DR_A2  CR_A2  DR_A3  CR_A3
------ ------  -------   ------ ------  -----  -----  -----  ----
ABC    JS1     JE1       1234.7  2345.6 0       0      156.7  5.6
ABC    JS1     JE2       16.7    345.6  16      345    0      0
ABC    JS2     JE3       1346.7  10     0       0      0      0
ABC    JS3     JE4       0       0      1456.7  45.6   0      0
ABC    JS3     JE5       0       0      2456.7  2.6    0      0 

(注意:DR_A1,CR_A1列是帐户A1的DR和A1等的CR。)

谁能帮我实现这一目标?

您可以通过标准的数据透视查询来执行此操作:

INSERT INTO Table2 (LEDGER, SOURCE, CATEGORY, DR_A1, CR_A1, DR_A2, CR_A2, DR_A3, CR_A3)
SELECT
    LEDGER,
    SOURCE,
    CATEGORY,
    MAX(CASE WHEN ACCOUNT = 'A1' THEN DR END) AS DR_A1,
    MAX(CASE WHEN ACCOUNT = 'A1' THEN CR END) AS CR_A1,
    MAX(CASE WHEN ACCOUNT = 'A2' THEN DR END) AS DR_A2,
    MAX(CASE WHEN ACCOUNT = 'A2' THEN CR END) AS CR_A2,
    MAX(CASE WHEN ACCOUNT = 'A3' THEN DR END) AS DR_A3,
    MAX(CASE WHEN ACCOUNT = 'A3' THEN CR END) AS CR_A3
FROM Table1
GROUP BY
    LEDGER,
    SOURCE,
    CATEGORY;

但是从您的预期输出来看,似乎您也在插入过程中也在调整DR / CR值。 如果是这样,那么您应该对问题进行解释。

如果您使用的是Oracle 11g,则有一种标准的方法,这种方法甚至更短:

SELECT *
  FROM tab
  pivot (MAX(dr) dr, MAX(cr) cr FOR (ACCOUNT) IN ('A1' AS a1, 'A2' as a2, 'A3' AS a3))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM