разбить данные в таблице на 2 столбца в зависимости от условий - PullRequest
0 голосов
/ 24 октября 2019

нужно разделить столбец в моей таблице на 2 в зависимости от условий. Все в предложении выбора.

В моей таблице есть столбец как detail_code. Есть 2 подробных кода. Я хочу, чтобы каждый подробный код был отдельным столбцом в моем предложении выбора.

Я пробовал подзапрос, но он выдает подзапрос, возвращающий более одной строки.

select id,(select detail_code from detc where type_ind ='C')as Detail_code1,
        (select detail_code from detc where type_ind ='P')as Detail_code2,
        (Select sum(amount) from amount_tbl where detail_code in (select detail_code from detc where type_ind ='C')and term_code='2019')as amt_detail_code1 
        from id_table;

Мой выводдолжно быть

Id  Detail_code1  Detail_code2  sum(amt_Detail_Code1)  sum(amt_Detail_code2)
1          C                P                  15                  45
2          C                P                 785                  74

Мой ввод

ID     Detail_cd   ind  amt
317002687   CA20    C   3
317002687   CA21    C   60
317002687   CA23    C   18.75
317002687   CA25    C   179.64
317002687   CA26    C   136.5
317002687   CA27    C   8.25
317002687   CA28    C   4
317002687   CA2B    C   8
317002687   CA2H    C   6.75
317002687   CA2I    C   237
317002687   CA2J    C   65.4

1 Ответ

0 голосов
/ 25 октября 2019

Этот запрос выдает результат, который вы описываете:

SELECT id, 'C' AS detail_code1, 'P' AS detail_code2,
       SUM(CASE WHEN ind = 'C' THEN amt END) AS sum_detail_code1,
       SUM(CASE WHEN ind = 'P' THEN amt END) AS sum_detail_code2
FROM name_of_your_input_table
GROUP BY id;

В качестве альтернативы, поскольку вы знаете, что такое два подробных кода, вы можете сделать эти имена столбцов и иметь значение каждого столбца как среднеедля этого подробного кода. Одним из способов сделать это является поворот. Вот синтаксис Oracle:

SELECT *
FROM (SELECT id, ind AS detail_code, amt
      FROM name_of_your_input_table)
PIVOT (AVG(amt)
       FOR detail_code IN ('C', 'P'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...