SQL 游标将两组行相乘

问题描述 投票:0回答:1

我正在使用 Hana data studio (SQL),需要编写一个游标,该游标采用原始数据集,将列年龄设置为 0,并将会计季度设置为输入数据集中不同会计季度列表的迭代值(FY24Q1、FY24Q2、FY24Q3)并将其与每个不同财政季度的原始数据集合并。

输入样本数据集:

姓名 年龄 财政季度
詹姆斯 22 FY24Q1
亨利 32 FY24Q2
伊森 45 FY24Q1
杰克 19 FY24Q3

输出:

姓名 年龄 财政季度
詹姆斯 22 FY24Q1
亨利 32 FY24Q2
伊森 45 FY24Q1
杰克 19 FY24Q3
詹姆斯 0 FY24Q1
亨利 0 FY24Q1
伊森 0 FY24Q1
杰克 0 FY24Q1
詹姆斯 0 FY24Q2
亨利 0 FY24Q2
伊森 0 FY24Q2
杰克 0 FY24Q2
詹姆斯 0 FY24Q3
亨利 0 FY24Q3
伊森 0 FY24Q3
杰克 0 FY24Q3
sql cursor union hana cartesian-product
1个回答
1
投票

这是一个真正奇怪的要求,但这里绝对不需要任何循环。有多种方法可以解决此问题,这是其中之一。

首先我需要创建一个要使用的表。这可能是您现有的桌子。

create table #Something
(
    Name varchar(10)
    , Age int
    , Fiscal_Quarter varchar(10)
)
insert #Something
values
('James', 22, 'FY24Q1')
, ('Henry', 32, 'FY24Q2')
, ('Ethan', 45, 'FY24Q1')
, ('Jake', 19, 'FY24Q3');

现在有一个表可以使用,我们只需查询即可获取现有数据,然后交叉连接姓名和季度。

这样的东西应该有效。它会根据您的样本数据生成您问题中所需的输出。

select Name
    , Age
    , Fiscal_Quarter
from #Something

union all

select Name
    , 0
    , Fiscal_Quarter
from
(
    select distinct Name from #Something
) n
cross join
(
    select distinct Fiscal_Quarter from #Something
) q
© www.soinside.com 2019 - 2024. All rights reserved.