选择小计保持正确顺序的行 [英] Select rows with subtotals maintaining proper order

查看:109
本文介绍了选择小计保持正确顺序的行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正尝试获取以下查询的输出,请帮助我

I am trying to get the output of my query as below please help me

partno    value     value1    phaseid
ABCD      10        11        A
ABCD      11        12        B
Subtotal  21        23    
DEFG      20        21        C
Subtotal  20        21
IJKL      30        31        A
IJKL      31        32        D
Subtotal  61        63


CREATE TABLE test_table
(
  partno text,
  value bigint,
  value1 bigint,
  phaseid text
)

INSERT INTO test_table(
            partno, value, value1, phaseid)
    VALUES ('ABCD', 10, 11, 'A'),('ABCD', 11, 12, 'B'),('DEFG', 20, 21, 'C'),('IJKL', 30, 31, 'A'),
    ('IJKL', 31, 321, 'D');

下面是我正在使用的查询

Below is the Query i am using

Select a.partno,a.value,a.value1,b.phaseid
from (
select partno,value,value1 from test_table a
Union all
Select 'Subtotal',Sum(value),sum(value1) from test_table a
Group By partno
) as a
Left Join test_table b USING (partno)
order by  value,value1

推荐答案

尝试以下简单查询:

select partno, value, value1, phaseid
from test_table a
union all
select partno || ' Subtotal', sum(value), sum(value1), null
from test_table a
group by 1
order by 1, 4

    partno     | value | value1 | phaseid 
---------------+-------+--------+---------
 ABCD          |    10 |     11 | A
 ABCD          |    11 |     12 | B
 ABCD Subtotal |    21 |     23 | 
 DEFG          |    20 |     21 | C
 DEFG Subtotal |    20 |     21 | 
 IJKL          |    30 |     31 | A
 IJKL          |    31 |     32 | D
 IJKL Subtotal |    61 |     63 | 
(8 rows)

如果要<< c $ c>小计代替 ABCD小计

select 
    case when strpos(partno, 'Subtotal') > 0 then 'Subtotal' else partno end partno,
    value, value1, phaseid
from (
    select partno, value, value1, phaseid
    from test_table a
    union all
    select partno || ' Subtotal', sum(value), sum(value1), null
    from test_table a
    group by 1
    order by 1, 4
    ) sub   

  partno  | value | value1 | phaseid 
----------+-------+--------+---------
 ABCD     |    10 |     11 | A
 ABCD     |    11 |     12 | B
 Subtotal |    21 |     23 | 
 DEFG     |    20 |     21 | C
 Subtotal |    20 |     21 | 
 IJKL     |    30 |     31 | A
 IJKL     |    31 |     32 | D
 Subtotal |    61 |     63 | 
(8 rows)

这篇关于选择小计保持正确顺序的行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆