Sql 如何在单个记录中输出不同的值
我有一个字符串形式的值。字段名为Sql 如何在单个记录中输出不同的值,sql,oracle,plsql,plsqldeveloper,plsql-package,Sql,Oracle,Plsql,Plsqldeveloper,Plsql Package,我有一个字符串形式的值。字段名为CF$\u LMWEQUIMENT,输出为单个字符串,由^分隔。以下是一个例子: ^All_Equipm^Consulting^DITCHCLEANER^Friction_M^ 我需要以这种方式输出数据库值的实际值,如下所示: All Equipment, Consulting, Ditch Cleaner, Friction Management. 我有这个查询来获取CF$\u LMWEQUIMENT SELECT T1.OPPORTUNITY_NO AS
CF$\u LMWEQUIMENT
,输出为单个字符串,由^
分隔。以下是一个例子:
^All_Equipm^Consulting^DITCHCLEANER^Friction_M^
我需要以这种方式输出数据库值的实际值,如下所示:
All Equipment, Consulting, Ditch Cleaner, Friction Management.
我有这个查询来获取CF$\u LMWEQUIMENT
SELECT T1.OPPORTUNITY_NO AS BO_NUMBER,
T2.CF$_LMWEQUIMENT AS Equiment_Group,
T1.STATE AS Status
FROM BUSINESS_OPPORTUNITY T1 JOIN
BUSINESS_OPPORTUNITY_CFT T2 on (T1.OBJKEY = T2.ROWKEY)
我有可以转换为实际值的API,例如:
select custom_field_enum_values_api.Get_Client_Value('EQUIGROLMW','DITCHCLEANER')
from dual;
API的输出将是沟渠清洁器
。但是,我的目标是将所有值放在一个字符串和单元格中,如我在上一段中所述->所有设备、咨询、沟渠清理器、摩擦管理
你可以在图片中注意到。现场设备组的字符串由(^)分隔
custom\u field\u enum\u values\u api.Get\u Client\u Value('EQUIGROLMW','DITCHCLEANER')
但是API只允许我传递两个参数:第一个是table_name,第二个是database_值。API的输出是实名,这是我要寻找的值。我希望我的输出类似于一个单元格中的图片,如Equiment_group field,但我希望API的值输出在单个单元格中
因此需要额外的两个步骤:
将CF$\u LMWEQUIMENT字符串拆分为可传递给翻译函数的不同标记
将转换函数的输出连接到单个字符串中
我们可以使用REGEXP_SUBSTR()完成第一步,使用LISTAGG()完成第二步。这里有一个解决方案
类似这样的代码再次证明了拙劣数据建模的代价是令人震惊的。这就是为什么像我这样的人总是喋喋不休
我的解决方案只解决了一个场景,其中有一行数据需要选择。当涉及多行时,情况就更复杂了。我现在没有时间做一个演示,但请评论我,如果这对你不起作用,我会在以后拿起这个
select t1.opportunity_no as bo_number,
listagg(
custom_field_enum_values_api.get_client_value('EQUIGROLMW',regexp_substr(cf$_lmwequiment,'[^\^]+', 1, level) )
, ',' ) within group (order by level)
as equiment_group,
t1.state as status
from business_opportunity t1
join business_opportunity_cft t2 on (t1.objkey = t2.rowkey)
connect by regexp_substr(cf$_lmwequiment,'[^\^]+', 1, level) is not null
group by t1.opportunity_no, t1.state
/