| E1| E2| E3|解释|量|
| --|--|--|--|--|
| 01 |||人员开支| 5000 |
| 01 | 1 ||干事| 5000 |
| 01 | 1 | 1 |基本薪金| 3000 |
| 01 | 1 | 2 |增加及补偿| 2000 |
| 02 |||货物和服务采购费用| 8000 |
| 02 | 1 ||服务采购| 8000 |
| 02 | 1 | 1 |文具采购| 6000 |
| 02 | 1 | 2 |办公用品采购| 2000 |
我想使用数据库中保存的表获得第二种表格式的输出,如下所示。
| A1| A2| A3|量|
| --|--|--|--|
| 人员开支||| 5000 |
| 人员开支|干事|| 5000 |
| 人员开支|干事|基本薪金| 3000 |
| 人员开支|干事|增加及补偿| 2000 |
| 货物和服务采购费用||||
| 货物和服务采购费用|服务采购|| 8000 |
| 货物和服务采购费用|服务采购|文具采购| 6000 |
| 货物和服务采购费用|服务采购|办公用品采购| 2000 |
为此,我用SQL编写了一个手动代码,如下所示。但我怎样才能让它更有效率呢?
SELECT
CASE WHEN E1 = '01' PERSONNEL EXPENSES'
WHEN E1 = '02' THEN 'GOODS AND SERVICES PURCHASE EXPENSES'
ELSE NULL END AS A1,
CASE WHEN E1 = '01' AND E2 = '1' THEN 'OFFICERS'
WHEN E1 = '02' AND E2 = '1' THEN 'SERVICE PROCUREMENT'
ELSE NULL END AS A2,
AMOUNT
FROM EXPENSES
如何从EXPENSES.EXPLANATION表中的列中取出数据,而不像下面的代码那样编写解释?
2条答案
按热度按时间8fq7wneg1#
你真的同时使用PostgreSQL和Oracle吗?如果是这样的话,我对前者无能为力,但是-对于甲骨文,这里有一个选择。不过,看起来不太好。
样本数据表明,这是关于某种层次结构:
阅读代码中的注解;他们解释了每个CTE(和最终的SELECT)的作用:
测试结果:
uajslkp62#
如果是Oracle,则可以使用如下的MODEL子句。它快速可靠。