oracle case when修改,用case when 改写优化 sql

开发给出的语句如下:2014/7/4 15:55:33

select a.attributeId,

a.attributeName,

a.attributeValue,

b.attributeValue,

c.attributeValue

from (select b.attributeId,

b.attributeName,

a.attributeValue,

a.product_id

from (SELECT TEMP.PRODUCT_ID,

TEMP.ID,

TEMP.INFO_VALUE AS attributeValue,

INFO.ID         AS attributeId

FROM TB_PRODUCT_DATA_NEXUS TEMP, TB_PRODUCT_FIELD_INFO INFO

where TEMP.PRODUCT_FIELD_ID = INFO.ID

and temp.product_id = 111) a

right join (SELECT distinct INFO.id   as attributeId,

INFO.NAME as attributeName

FROM TB_PRODUCT_DATA_NEXUS TEMP,

TB_PRODUCT_FIELD_INFO INFO

where TEMP.PRODUCT_FIELD_ID = INFO.ID

and temp.product_id in (111, 112, 113)) b

on a.attributeId = b.attributeId

order by b.attributeId

) a,

(select b.attributeId,

b.attributeName,

a.attributeValue,

a.product_id

from (SELECT TEMP.PRODUCT_ID,

TEMP.ID,

TEMP.INFO_VALUE AS attributeValue,

INFO.ID         AS attributeId

FROM TB_PRODUCT_DATA_NEXUS TEMP, TB_PRODUCT_FIELD_INFO INFO

where TEMP.PRODUCT_FIELD_ID = INFO.ID

and temp.product_id = 112) a

right join (SELECT distinct INFO.id   as attributeId,

INFO.NAME as attributeName

FROM TB_PRODUCT_DATA_NEXUS TEMP,

TB_PRODUCT_FIELD_INFO INFO

where TEMP.PRODUCT_FIELD_ID = INFO.ID

and temp.product_id in (111, 112, 113)) b

on a.attributeId = b.attributeId

order by b.attributeId

) b,

(select b.attributeId,

b.attributeName,

a.attributeValue,

a.product_id

from (SELECT TEMP.PRODUCT_ID,

TEMP.ID,

TEMP.INFO_VALUE AS attributeValue,

INFO.ID         AS attributeId

FROM TB_PRODUCT_DATA_NEXUS TEMP, TB_PRODUCT_FIELD_INFO INFO

where TEMP.PRODUCT_FIELD_ID = INFO.ID

and temp.product_id = 113) a

right join (SELECT distinct INFO.id   as attributeId,

INFO.NAME as attributeName

FROM TB_PRODUCT_DATA_NEXUS TEMP,

TB_PRODUCT_FIELD_INFO INFO

where TEMP.PRODUCT_FIELD_ID = INFO.ID

and temp.product_id in (111, 112, 113)) b

on a.attributeId = b.attributeId

order by b.attributeId

) c

where a.attributeId = b.attributeId

and a.attributeId = c.attributeId

改写后SELECT

MAX(info_id1)

name,

MAX(attributeValue1),

MAX(attributeValue2),

MAX(attributeValue3)

FROM (SELECT

info.name,

CASE WHEN temp.product_id = 111 THEN TEMP.INFO_VALUE END AS attributeValue1,

CASE WHEN temp.product_id = 111 THEN INFO.ID END AS info_id1,

CASE WHEN temp.product_id = 112 THEN TEMP.INFO_VALUE END AS attributeValue2,

CASE WHEN temp.product_id = 112 THEN INFO.ID END AS info_id2,

CASE WHEN temp.product_id = 113 THEN TEMP.INFO_VALUE END AS attributeValue3,

CASE WHEN temp.product_id = 113 THEN INFO.ID END AS info_id3

--row_number() over(PARTITION BY product_id ORDER BY info.id) AS cnt

FROM (SELECT product_id, info_value, product_field_id FROM tb_product_data_nexus WHERE product_id IN (111, 112, 113)) TEMP, TB_PRODUCT_FIELD_INFO INFO

WHERE TEMP.PRODUCT_FIELD_ID = INFO.ID ORDER BY info.id)

GROUP BY name

ORDER BY 1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值