使用 postgresql 的标签、字幕、记录和小计
Tags, subtitles, records and subtotals using postgresql
我使用基于列表的报告。此列表包含三个元素:
副标题
记录
小计
等等...
每行都有一个格式化标签:
H Subtitle
R Record
S Subtotal
.
老办法——两步解决
首先,我根据记录创建了一个唯一代码列表
SELECT DISTINCT ON (rec_code) rec_code FROM records
然后我在我的前端工具中循环此 "list" 并为每个代码获取记录
SELECT * FROM records where rec_code=list.rec_code
这是完成工作的一种相当简单的方法,但速度很慢。
.
寻找新方法 - 一步
我最接近的是模仿小计。但是仍然缺少字幕和标签
select rec_code, rec_sum
from (
select rec_code, 'name' as name, rec_sum, rec_code as o
from rec as a
union all
select 'Subtotal', 'name' as name, sum(rec_sum), rec_code as o
from rec as a
group by rec_code
) as a
order by o, rec_sum
http://sqlfiddle.com/#!3/270d6/10
这是这个 sqlfiddle 想要的输出
H code a
R A 1
R A 2
S Subtotal 3
H code b
R B 3
R B 3
S Subtotal 6
这可能吗?又如何?
提前感谢您提供任何线索!
你真的应该在应用层做这个格式化。但是,您可以将更接近的 SQL 查询放在一起。 For instance:
select rec_code, rec_sum
from (
select rec_code, 'name' as name, rec_sum, rec_code as o, 2 as o2
from rec as a
union all
select 'Subtotal', 'name' as name, sum(rec_sum), rec_code as o, 2 as o2
from rec as a
group by rec_code
union all
select code_name, 'header' as name, NULL, code_id as o, 1 as o2
from code
) a
order by o, o2, rec_sum;
with codes as (
select *
from rec
join code on rec_code = code_id
)
select tag, cname, rec_sum
from (
select code_name, 'R' tag, rec_code cname, rec_sum
from codes
union all
select distinct on (code_id) code_name, 'H' tag, code_name, null
from codes
union all
select code_name, 'S' tag, 'Subtotal', sum(rec_sum)
from codes
group by 1
order by 1,2
) sub
我使用基于列表的报告。此列表包含三个元素:
副标题 记录 小计 等等...
每行都有一个格式化标签:
H Subtitle
R Record
S Subtotal
.
老办法——两步解决
首先,我根据记录创建了一个唯一代码列表
SELECT DISTINCT ON (rec_code) rec_code FROM records
然后我在我的前端工具中循环此 "list" 并为每个代码获取记录
SELECT * FROM records where rec_code=list.rec_code
这是完成工作的一种相当简单的方法,但速度很慢。
.
寻找新方法 - 一步
我最接近的是模仿小计。但是仍然缺少字幕和标签
select rec_code, rec_sum
from (
select rec_code, 'name' as name, rec_sum, rec_code as o
from rec as a
union all
select 'Subtotal', 'name' as name, sum(rec_sum), rec_code as o
from rec as a
group by rec_code
) as a
order by o, rec_sum
http://sqlfiddle.com/#!3/270d6/10
这是这个 sqlfiddle 想要的输出
H code a
R A 1
R A 2
S Subtotal 3
H code b
R B 3
R B 3
S Subtotal 6
这可能吗?又如何?
提前感谢您提供任何线索!
你真的应该在应用层做这个格式化。但是,您可以将更接近的 SQL 查询放在一起。 For instance:
select rec_code, rec_sum
from (
select rec_code, 'name' as name, rec_sum, rec_code as o, 2 as o2
from rec as a
union all
select 'Subtotal', 'name' as name, sum(rec_sum), rec_code as o, 2 as o2
from rec as a
group by rec_code
union all
select code_name, 'header' as name, NULL, code_id as o, 1 as o2
from code
) a
order by o, o2, rec_sum;
with codes as (
select *
from rec
join code on rec_code = code_id
)
select tag, cname, rec_sum
from (
select code_name, 'R' tag, rec_code cname, rec_sum
from codes
union all
select distinct on (code_id) code_name, 'H' tag, code_name, null
from codes
union all
select code_name, 'S' tag, 'Subtotal', sum(rec_sum)
from codes
group by 1
order by 1,2
) sub