Sql ose ACT/DESC/ECH组合应该是子表中它自己的行,也许FK关系回到了基表。@Romain:您在处理这些数据以获得所需结果时遇到的困难,希望能让您认识到在未来的设计中避免重复组的重要性。@BobJarvis是的。。。我从未见过这样的暴行。。。不幸的

Sql ose ACT/DESC/ECH组合应该是子表中它自己的行,也许FK关系回到了基表。@Romain:您在处理这些数据以获得所需结果时遇到的困难,希望能让您认识到在未来的设计中避免重复组的重要性。@BobJarvis是的。。。我从未见过这样的暴行。。。不幸的,sql,oracle,function,plsql,Sql,Oracle,Function,Plsql,ose ACT/DESC/ECH组合应该是子表中它自己的行,也许FK关系回到了基表。@Romain:您在处理这些数据以获得所需结果时遇到的困难,希望能让您认识到在未来的设计中避免重复组的重要性。@BobJarvis是的。。。我从未见过这样的暴行。。。不幸的是,这个制度已经实施了好几年,我不得不处理它 CREATE TABLE FORM ( ID_FORM INT, ACT_1 VARCHAR2 (10), ACT_2 VARCHAR2 (10), ACT_3 V


ose ACT/DESC/ECH组合应该是子表中它自己的行,也许FK关系回到了基表。@Romain:您在处理这些数据以获得所需结果时遇到的困难,希望能让您认识到在未来的设计中避免重复组的重要性。@BobJarvis是的。。。我从未见过这样的暴行。。。不幸的是,这个制度已经实施了好几年,我不得不处理它
CREATE TABLE FORM (
    ID_FORM INT, 
    ACT_1 VARCHAR2 (10),
    ACT_2 VARCHAR2 (10),
    ACT_3 VARCHAR2 (10),
    ACT_4 VARCHAR2 (10),
    DESC_1 VARCHAR2 (10),
    DESC_2 VARCHAR2 (10),
    DESC_3 VARCHAR2 (10),
    DESC_4 VARCHAR2 (10),
    ECH_1 INT,
    ECH_2 INT,
    ECH_3 INT,
    ECH_4 INT
);

INSERT INTO FORM VALUES ('1','A1','A2','A3',null,'D1','D2','D3',null,'2','12','6',null);
INSERT INTO FORM VALUES ('2','A1','A1','A3',null,'D1','D2','D1',null,'2','2','2',null);
INSERT INTO FORM VALUES ('3','A3','A3','A1',null,'D4','D4','D1',null,'2','2','12',null);
ACT_1|| DESC_1|| ECH_1 -> presta1
ACT_2|| DESC_2|| ECH_2 -> presta2
ACT_3|| DESC_3|| ECH_3 -> presta3
ACT_4|| DESC_4|| ECH_4 -> presta4
select 
ACT_1|| DESC_1|| ECH_1 as presta1,
ACT_2|| DESC_2|| ECH_2 as presta2,
ACT_3|| DESC_3|| ECH_3 as presta3,
ACT_4|| DESC_4|| ECH_4 as presta4
from FORM;

PRESTA1 PRESTA2 PRESTA3 PRESTA4
A1D12   A2D212  A3D36    -   (Function have to return 3)
A1D12   A1D22   A3D12    -    (Function have to return 3)
A3D42   A3D42   A1D112   -    (function have to return 2)
select ID_FORM, n
from FORM f
cross apply (
  select count(*) n 
  from (
     select f.act_1 || f.DESC_1 || f.ECH_1  presta from dual
     union
     select f.act_2 || f.DESC_2 || f.ECH_2 from dual
     union
     select f.act_3 || f.DESC_3 || f.ECH_3 from dual
     union
     select f.act_4 || f.DESC_4 || f.ECH_4 from dual
  )
  where presta is not null
)