Sql 这里没有名为parameter_number的列,它们的代码会抛出错误,示例中显示的数字与value列中的数字相同。所以我很确定他们想对value列求和。在这个示例数据中,没有重复的参数/值。在完整的数据集中,我将按site_id、date和另一列进行分组
Sql 这里没有名为parameter_number的列,它们的代码会抛出错误,示例中显示的数字与value列中的数字相同。所以我很确定他们想对value列求和。在这个示例数据中,没有重复的参数/值。在完整的数据集中,我将按site_id、date和另一列进行分组,sql,database,oracle,group-by,pivot,Sql,Database,Oracle,Group By,Pivot,这里没有名为parameter_number的列,它们的代码会抛出错误,示例中显示的数字与value列中的数字相同。所以我很确定他们想对value列求和。在这个示例数据中,没有重复的参数/值。在完整的数据集中,我将按site_id、date和另一列进行分组,以生成一组唯一的变量,每个唯一的组合只有一个值。在这种情况下,sum或max都可以工作,但有点慢,这两个变量ANC需要15秒以上的时间。三号。我有12个左右的其他变量需要添加。没问题,看过GMB的答案后,我建议这是可行的,但有点慢,这两个变量
这里没有名为parameter_number的列,它们的代码会抛出错误,示例中显示的数字与value列中的数字相同。所以我很确定他们想对value列求和。在这个示例数据中,没有重复的参数/值。在完整的数据集中,我将按site_id、date和另一列进行分组,以生成一组唯一的变量,每个唯一的组合只有一个值。在这种情况下,sum或max都可以工作,但有点慢,这两个变量ANC需要15秒以上的时间。三号。我有12个左右的其他变量需要添加。没问题,看过GMB的答案后,我建议这是可行的,但有点慢,这两个变量ANC需要15秒以上的时间。三号。我有12个左右的其他变量需要添加。没问题,看过GMB的答案后,我建议在我的完整数据集上不能完全实现这一点,但我认为这与多个参数(10个其他参数加上ANC和NO3)有关。当我有更多的时间的时候,我可能会再看一看。我不能完全在我的完整数据集上使用它,但我认为它与多个参数(10个其他参数加上ANC和NO3)有关。等我有时间再看一下。
drop table parameter_test;
create table parameter_test
(
site_id VARCHAR(30),
parameter VARCHAR(30),
value NUMBER,
method VARCHAR(30)
);
insert into parameter_test values ('site1', 'ANC', 10.1,'Gran 1952');
insert into parameter_test values('site2', 'ANC', 21.8, 'Gran 1952');
insert into parameter_test values('site1', 'NO3', 2.1, 'EPA 1983');
insert into parameter_test values('site2', 'NO3', 7.2, 'EPA 1983');
drop table parameter_pivot_test;
create table parameter_pivot_test
AS
(select * from (select site_id, parameter_number, parameter
from parameter_test)
pivot (sum(parameter_number) for parameter in (
'ANC' ANC,
'NO3' NO3
)))
;
drop table parameter_pivot;
create table parameter_pivot
(
site_id VARCHAR(30),
ANC NUMBER,
NO3 NUMBER,
ANC_method VARCHAR(30),
NO3_method VARCHAR(30)
);
insert into parameter_pivot values ('site1', 10.1, 2.1, 'Gran 1952', 'EPA 1983');
insert into parameter_pivot values ('site2', 21.8, 7.2, 'Gran 1952', 'EPA 1983');
drop table parameter_pivot_test;
create table parameter_pivot_test
AS
(select coalesce(anc_site, no3_site) as site_id, anc, no3, anc_method, mo3_method from
(select site_id as anc_site, value as anc, method as anc_method from parameter_test where parameter = 'ANC') anc
FULL OUTER JOIN
(select site_id as no3_site, value as no3, method as no3_method from parameter_test where parameter = 'NO3') no3
ON anc.anc_site = no3.no3_site
)
;
select
site_id,
max(case when parameter = 'ANC' then value end) anc,
max(case when parameter = 'NO3' then value end) no3,
max(case when parameter = 'ANC' then method end) anc_method,
max(case when parameter = 'NO3' then method end) no3_method
from parameter_pivot
group by side_id
SITE_ID | ANC | NOC | ANC_METHOD | NO3_METHOD
:------ | ---: | --: | :--------- | :---------
site2 | 21.8 | 7.2 | Gran 1952 | EPA 1983
site1 | 10.1 | 2.1 | Gran 1952 | EPA 1983