我在oracle 11g中有一个表属性,如
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每个订单包含数百个属性,如下所示
我想要的数据格式是这样的
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用于获取数据的查询是
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个订单的数据,所以查询需要几天时间来显示数据。有人能给出一个更好的方式来格式化数据吗。我试过使用枢轴,但没能得到它。
发布于 2016-03-17 12:31:51
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;https://stackoverflow.com/questions/36060144
复制相似问题