是否有可能动态地在一组数据行中添加空行?我有以下查询,它获取多行数据。我想分开,比如在每5行后添加空行。
查询:
select php.ref_dcp_key, sum(php.group_booking), count(php.group_booking), 0
from gx_pnr_history ph, gx_pnr_his_prof php
where ph.gmpnr_loc_key = php.gmpnr_loc_key
group by php.ref_dcp_key order by php.ref_dcp_key;
答案 0 :(得分:0)
@SandeepGowada,你必须为行创建一个外部结构,并在每5个数据行之后放入第6个填充行。
我认为@juergend的观点应该真正在表示层中完成(尽管通常它可能需要的总代码不比SQL中那么多 - 但它确实阻碍了静态以外的任何工作报告,就像允许重新排序或过滤的数据网格一样)
我已经将一些未经测试的代码(使用Oracle语法)组合在一起,该代码显示了它是如何完成的示例 - 我们如何准备基础数据,然后构建一个表格所有必要行的占位符,然后将基础数据连接到适当位置的占位符。我已经做了一些更精细的计算,以显示5号常数的使用位置。
此外,我还没有包含任何代码来删除最后一组中的任何多余填充行(即,无论基础数据如何,返回的行数始终是6的倍数)。
我也没有包含任何有关所需number_table或序列生成器的代码。
WITH base_data AS
(
SELECT
php.ref_dcp_key
,sum(php.group_booking) AS group_booking_sum
,count(php.group_booking) AS group_booking_count
,0 AS zero_value_column
,MOD(ROW_NUMBER() OVER (ORDER BY php.ref_dcp_key) - 1, 5) AS group_line_num
,( (ROW_NUMBER() OVER (ORDER BY php.ref_dcp_key) + (5 - 1)) / 5 ) AS row_group_num
--all appearances of the number 5 constants determine the number of lines per group
FROM
gx_pnr_history /*AS*/ ph
INNER JOIN
gx_pnr_his_prof /*AS*/ php
ON (ph.gmpnr_loc_key = php.gmpnr_loc_key)
GROUP BY
php.ref_dcp_key
)
,row_structure AS
(
SELECT
MOD(number - 1, (5 + 1)) AS group_line_num
,number + ((5 + 1) - 1) / (5 + 1) AS row_group_num
FROM
number_table /*this needs to be a reference either to a numbers table, or a number sequence generator*/
WHERE
number BETWEEN 1 AND ((SELECT MAX(row_group_num) * (5 + 1) FROM base_data))
)
SELECT
ref_dcp_key
,group_booking_sum
,group_booking_count
,zero_value_column
,ROW_NUMBER() OVER (ORDER BY row_structure.row_group_num ASC, row_structure.group_line_num ASC) AS final_order
FROM
row_structure
LEFT JOIN
base_data
ON (base_data.row_group_nun = row_structure.row_group_num)
AND (base_data.group_line_num = row_structure.group_line_num)
ORDER BY
final_order