oracle列转行操作
这里需要对不同状态的设备数量进行灵活的统计并生成报表
这里有两张表,一张是错误类别表(AC_DICT_OPTION),另外一张是错误信息表(MR_METERDATA)分别需要统计基础信息表中’性质变更’,‘正常’,'雾珠’三种状态的设备数量,在group by 之后使用PIVOT 进行行列的变换.
SELECT
*
FROM
(
SELECT
*
FROM
(
SELECT
METER_ERROR_RESULT,
"COUNT" (1) numb
FROM
MR_METERDATA
GROUP BY
METER_ERROR_RESULT
) PIVOT (
MAX (numb) FOR METER_ERROR_RESULT IN (
'性质变更' AS I_XINGZHIBGLD
)
)
),
(
SELECT
*
FROM
(
SELECT
LABEL,
numb
FROM
(
SELECT
OPTION_VALUE,
LABEL
FROM
AC_DICT_OPTION
WHERE
DICT_TYPE = 'mr_reading_status'
) A,
(
SELECT
CURRENT_METER_STATE,
"COUNT" (1) numb
FROM
MR_METERDATA
GROUP BY
CURRENT_METER_STATE
) b
WHERE
A .OPTION_VALUE = b.CURRENT_METER_STATE
) PIVOT (
MAX (numb) FOR LABEL IN ('正常' AS I_ZHENGCHANGZT,'雾珠'as wz)
)
)
结果图
PIVOT 中in里面只能写死,无法写入动态的参数.倒是可以用动态sql的方式来实现,不过用起来感觉不太好,暂时还没有很好的解决方法