Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将19列减少到5列_Sql_Oracle - Fatal编程技术网

Sql 将19列减少到5列

Sql 将19列减少到5列,sql,oracle,Sql,Oracle,我有个问题。我需要帮助 所以,我在使用Sqldeveloper/Oracle。我有19列,我想把它减少到5列,但并不总是有5个字段。有可能吗?例如,我有: 使用此代码: SELECT distinct PRO.CODPRO, CASE RCA.CODRCA WHEN 'LOGIST' THEN RCA.CODRCA END AS IndustriesConcerned1, CASE RCA.CODRCA WHEN 'LEGSEC' THEN RCA.CODR

我有个问题。我需要帮助

所以,我在使用Sqldeveloper/Oracle。我有19列,我想把它减少到5列,但并不总是有5个字段。有可能吗?例如,我有:

使用此代码:

 SELECT distinct PRO.CODPRO, 
        CASE RCA.CODRCA WHEN 'LOGIST' THEN RCA.CODRCA END  AS IndustriesConcerned1,
        CASE RCA.CODRCA WHEN 'LEGSEC' THEN RCA.CODRCA END  AS IndustriesConcerned2,
        CASE RCA.CODRCA WHEN 'AGRICU' THEN RCA.CODRCA END  AS IndustriesConcerned3,
        CASE RCA.CODRCA WHEN 'AGROAL' THEN RCA.CODRCA END  AS IndustriesConcerned4,
        CASE RCA.CODRCA WHEN 'ARTAUU' THEN RCA.CODRCA END  AS IndustriesConcerned5,
        CASE RCA.CODRCA WHEN 'ENTRET' THEN RCA.CODRCA END  AS IndustriesConcerned7,
        CASE RCA.CODRCA WHEN 'ESPVER' THEN RCA.CODRCA END  AS IndustriesConcerned8,
        CASE RCA.CODRCA WHEN 'GROEUV' THEN RCA.CODRCA END  AS IndustriesConcerned9,
        CASE RCA.CODRCA WHEN 'INDCHI' THEN RCA.CODRCA END  AS IndustriesConcerned10,
        CASE RCA.CODRCA WHEN 'INDLEG' THEN RCA.CODRCA END  AS IndustriesConcerned11,
        CASE RCA.CODRCA WHEN 'INDLOU' THEN RCA.CODRCA END  AS IndustriesConcerned12,
        CASE RCA.CODRCA WHEN 'LEGHUM' THEN RCA.CODRCA END  AS IndustriesConcerned13,
        CASE RCA.CODRCA WHEN 'LOUHUM' THEN RCA.CODRCA END  AS IndustriesConcerned14,
        CASE RCA.CODRCA WHEN 'LOUSEC' THEN RCA.CODRCA END  AS IndustriesConcerned15,
        CASE RCA.CODRCA WHEN 'MARICU' THEN RCA.CODRCA END  AS IndustriesConcerned16,
        CASE RCA.CODRCA WHEN 'SECEUV' THEN RCA.CODRCA END  AS IndustriesConcerned17,
        CASE RCA.CODRCA WHEN 'TP' THEN RCA.CODRCA END  AS IndustriesConcerned18,
        CASE RCA.CODRCA WHEN 'TRANSP' THEN RCA.CODRCA END  AS IndustriesConcerned19
        FROM PRO JOIN PRB ON PRO.MOTCLE=PRB.CODPRO JOIN RCA ON PRB.codrca=RCA.codrca where RCA.typrca='UTI' AND RCA.CODRCA<>'LEGSEC' AND RCA.CODRCA<>'LOUSEC' AND RCA.CODRCA<>'LEGHUM' AND RCA.CODRCA<>'LOUHUM';
我想要这样的5列


您有解决方案吗?

您可以使用下面的查询将CODRCA值的不同列表连接到一个逗号分隔的列表中,然后将列表拆分为5个不同的列。如果您愿意,还可以将订单添加到列表中

选择codpro, regexp_substrcodrca_list,“[^,]+”,1,1为相关行业1, regexp_substrcodrca_list,“[^,]+”,1,2作为行业相关2, regexp_substrcodrca_list,“[^,]+”,1,3为行业相关3, regexp_substrcodrca_list,“[^,]+”,1,4作为行业相关4, regexp_substrcodrca_list,“[^,]+”,1,5为相关行业5 从…起 选择CODPRO,LISTAGG CODRCA,,'作为CODRCA\u列表 从中选择DISTINCT PRO.CODPRO、RCA.CODRCA 来自专业 在PRO.MOTCLE=PRB.CODPRO上加入PRB 在PRB.codrca=RCA.codrca上加入RCA 其中RCA.typrca='UTI' 和RCA.CODRCA'LEGSEC' 和RCA.CODRCA'LOUSEC' 和RCA.CODRCA'LEGHUM' 和RCA.CODRCA'LOUHUM' codpro分组;
你想要的是一个简单的功能

唯一的区别是您不希望以列值为轴心,而可能以关键字顺序为轴心

这里的查询以关键字的字母顺序为中心

请注意,前两个子查询只生成简化数据,如下所示:

CODPRO  CODRCA
------- ------
400JE   LOGIST
400JE   INDLEG
50EFJ10 TP    
50EFJ10 ESPVER
50EFJ10 AGRICU
50EFJ10 INDLEG
50EFJ10 LOGIST
查询首先使用CODRCA及其轴的顺序计算行号:

结果

CODPRO  C1_COD C2_COD C3_COD C4_COD C5_COD
------- ------ ------ ------ ------ ------
400JE   INDLEG LOGIST                     
50EFJ10 AGRICU ESPVER INDLEG LOGIST TP
如果您喜欢其他分拣逻辑,请根据需要进行调整。
如果您需要不同的列名,也可以进行调整。

您总是想要相同的5列?使用合并函数并输出5列您使用的Oracle数据库版本是什么?我反对创建此类case语句,并使用查找表,其中包含您在case语句中比较的值-是的,我想要相同的5列columns-Coalesce很好,我想我从未使用过它,但使用了同一个表中的多个列-我的Oracle数据库版本是19.2.1.247-不幸的是,我无法创建新表您的代码是准确的,非常感谢!但是我有一个代码,我不会说如何将您的代码与我的代码集成。如果不更清楚地描述您现有的代码,我无法帮助您。如果您需要这方面的帮助,应该在单独的问题中询问,因为此查询回答了所问的问题。
CODPRO  C1_COD C2_COD C3_COD C4_COD C5_COD
------- ------ ------ ------ ------ ------
400JE   INDLEG LOGIST                     
50EFJ10 AGRICU ESPVER INDLEG LOGIST TP