首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用枢轴在oracle 11g中格式化数据

问使用枢轴在oracle 11g中格式化数据
EN

Stack Overflow用户
提问于 2016-03-17 12:08:36
回答 1查看 35关注 0票数 0

我在oracle 11g中有一个表属性,如

代码语言:javascript
复制
order           attribute                            value
-------------------------------------------------------------------------
802605          CL_ACC844FIBRE_SERVICE                  N

802605          CL_ACC844FIBRE_SERVICE_LOCATION         N

802605          CL_ACC844FLOOR                          GROUND

802605           CL_ACC844HAZARD                        BTSS  

802605          CL_ACC844HOUSING                        CABINET

802605          CL_ACC844TEAM                           EDINBURGH

802605          CL_ACC844LANDLORDS_CONSENT                Y

802605         CL_ACC844LANDLORDS_NECESSARY                N

802605         CL_ACC844LANDLORD_NAME                   NOT APPLICABLE

802605          CL_ACC844LANDLORD_PHONE                 NOT APPLICABLE

802605          CL_ACC844LOCATION                       ROOM 

802605         CL_ACC844MAINTENANCE_CAT                 FIBRE 

802605         CL_ACC844NTE_CHASSIS                     SINGLE SLOT

802605         CL_ACC844OCCUPANCY_COMMENCE_DATE         17/02/2012

每个订单包含数百个属性,如下所示

我想要的数据格式是这样的

代码语言:javascript
复制
ORDER   TECH  BLEACH  AF1        AF2            AF3         AF4     EF
-----------------------------------------------------------------------------
802605   N     YES  11/10/2007  11/10/2007  11/10/2007  11/10/2007  1/10/2007

用于获取数据的查询是

代码语言:javascript
复制
SELECT a1.order ,
       a1.value tech  ,
       a2.value bleach  ,
       a3.value af1  ,
       a4.value af2  ,
       a5.value af3  ,
       a6.value af4  ,
       a7.value ef  
  FROM attributes a1,
       attributes a2,
       attributes a3,
       attributes a4,
       attributes a5,
       attributes a6,
       attributes a7
 WHERE a1.order = '802605-S844'
         AND a1.order = a2.order
         AND ( a1.atribute LIKE 'CL_ACC%G_ADSL_DETAILS_ACCESS_TECHNOLOGY'
         OR a2.atribute LIKE 'CL_ACC%G_VCG_DETAILS1COS_BLEACHING_FLAG'
         OR a3.atribute LIKE 'CL_ACC%G_VCG_DETAILS1G_6LAYER_COS_CIPR_AF1'
         OR a4.atribute LIKE 'CL_ACC%G_VCG_DETAILS1G_6LAYER_COS_CIPR_AF2'
         OR a5.atribute LIKE 'CL_ACC%G_VCG_DETAILS1G_6LAYER_COS_CIPR_AF3'
         OR a6.atribute LIKE 'CL_ACC%G_VCG_DETAILS1G_6LAYER_COS_CIPR_AF4'
         Or A7.atribute Like 'CL_ACC%G_VCG_DETAILS1G_6LAYER_COS_CIPR_EF' );

我知道这不是使用自联接来格式化数据的正确方式,而且我还必须获得400个订单的数据,所以查询需要几天时间来显示数据。有人能给出一个更好的方式来格式化数据吗。我试过使用枢轴,但没能得到它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-17 12:31:51

代码语言:javascript
复制
SELECT order,
       MAX( CASE WHEN attribute LIKE 'CL_ACC%G_ADSL_DETAILS1COS_BLEACHING_FLAG'
                 THEN value END ) AS tech,
       MAX( CASE WHEN attribute LIKE 'CL_ACC%G_ADSL_DETAILS1G_6LAYER_COS_CIPR_AF1'
                 THEN value END ) AS bleach,
       MAX( CASE WHEN attribute LIKE 'CL_ACC%G_ADSL_DETAILS1G_6LAYER_COS_CIPR_AF2'
                 THEN value END ) AS af1,
       MAX( CASE WHEN attribute LIKE 'CL_ACC%G_ADSL_DETAILS1G_6LAYER_COS_CIPR_AF3'
                 THEN value END ) AS af2,
       MAX( CASE WHEN attribute LIKE 'CL_ACC%G_ADSL_DETAILS1G_6LAYER_COS_CIPR_AF4'
                 THEN value END ) AS af3,
       MAX( CASE WHEN attribute LIKE 'CL_ACC%G_ADSL_DETAILS1G_6LAYER_COS_CIPR_EF'
                 THEN value END ) AS af4,
       MAX( CASE WHEN attribute LIKE 'CL_ACC%G_ADSL_DETAILS_ACCESS_TECHNOLOGY'
                 THEN TO_DATE( value, 'DD/MM/YYYY' ) END ) AS ef
FROM   attributes
WHERE  order IN ( '802605-S844' /*, ...*/ )
GROUP BY order;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36060144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档