zoukankan      html  css  js  c++  java
  • postgresql 行转列,列转行后加入到一个整体数据

    这里行转列的基本思想就是使用max,因为其他列下面都是NULL,所以可以Max最后就只能得到有值的这行

    普通的查询:

    SELECT
     icd ,
     case when 
    (ROW_NUMBER() OVER(PARTITION BY INNER_CD ORDER BY SLIDE_SEQ )) =1  then  SLIDE_QTY  END  as SLIDE_QTY1,
     case when                                                                                                                     
    (ROW_NUMBER() OVER(PARTITION BY INNER_CD ORDER BY SLIDE_SEQ )) =1 then SLIDE_S_UNIT_PRICE END   as SLIDE_S_UNIT_PRICE1,
     case when                                                                                                                     
    (ROW_NUMBER() OVER(PARTITION BY INNER_CD ORDER BY SLIDE_SEQ )) =2 then SLIDE_QTY END   as SLIDE_QTY2,
     case when                                                                                                                     
    (ROW_NUMBER() OVER(PARTITION BY INNER_CD ORDER BY SLIDE_SEQ )) =3 then SLIDE_QTY END  as SLIDE_QTY3
    
    FROM
        "temp"."user" mm
    WHERE 
    mm.icd = 'ADDM01-20160612-1-100002-001'

    得到的数据是:

    使用max后:

    SELECT  
        MAX( case when  SLIDE_SEQ = 1 THEN SLIDE_QTY  END  )as SLIDE_QTY1,
        MAX( case when  SLIDE_SEQ = 2 THEN SLIDE_QTY  END  )as SLIDE_QTY2,
        MAX( case when  SLIDE_SEQ = 3 THEN SLIDE_QTY  END  )as SLIDE_QTY3,
        MAX( case when  SLIDE_SEQ = 4 THEN SLIDE_QTY  END  )as SLIDE_QTY4,
        MAX( case when  SLIDE_SEQ = 5 THEN SLIDE_QTY  END  )as SLIDE_QTY5,
        MAX( case when  SLIDE_SEQ = 6 THEN SLIDE_QTY  END  )as SLIDE_QTY6,
        MAX( case when  SLIDE_SEQ = 7 THEN SLIDE_QTY  END  )as SLIDE_QTY7,
        MAX( case when  SLIDE_SEQ = 8 THEN SLIDE_QTY  END  )as SLIDE_QTY8,
        MAX( case when  SLIDE_SEQ = 9 THEN SLIDE_QTY  END  )as SLIDE_QTY9,
        MAX( case when  SLIDE_SEQ = 10 THEN SLIDE_QTY  END  )as SLIDE_QTY10
    FROM
    user
    WHERE 
    anken_id = 'ADDM01-20160612-1-100002-001'

    得到的结果:

    然后可以通过子查询进行组合

        SELECT * from  
    m_product INNER JOIN 
        ( SELECT  
        anken_id,
            icd,
            MAX( case when  SLIDE_SEQ = 1 THEN SLIDE_QTY  END  )as SLIDE_QTY1,
            MAX( case when  SLIDE_SEQ = 2 THEN SLIDE_QTY  END  )as SLIDE_QTY2,
            MAX( case when  SLIDE_SEQ = 3 THEN SLIDE_QTY  END  )as SLIDE_QTY3,
            MAX( case when  SLIDE_SEQ = 4 THEN SLIDE_QTY  END  )as SLIDE_QTY4,
            MAX( case when  SLIDE_SEQ = 5 THEN SLIDE_QTY  END  )as SLIDE_QTY5,
            MAX( case when  SLIDE_SEQ = 6 THEN SLIDE_QTY  END  )as SLIDE_QTY6,
            MAX( case when  SLIDE_SEQ = 7 THEN SLIDE_QTY  END  )as SLIDE_QTY7,
            MAX( case when  SLIDE_SEQ = 8 THEN SLIDE_QTY  END  )as SLIDE_QTY8,
            MAX( case when  SLIDE_SEQ = 9 THEN SLIDE_QTY  END  )as SLIDE_QTY9,
            MAX( case when  SLIDE_SEQ = 10 THEN SLIDE_QTY  END  )as SLIDE_QTY10
        FROM
        user
    WHERE 
    user.anken_id = 'ADDM01-20160612-1-100002-001'
    GROUP BY user.inner_cd,user.anken_id) t1 on  m_product.anken_id = t1.anken_id
    where t1.anken_id = 'ADDM01-20160612-1-100002-001'

    就可以得到富含行转列数据的。

    列转行的基本思路就是通过制定一个共同的字段,然后将查询来的数据一行一行的累加起来。

        SELECT
                    aa,
                    bb,
            c_1 AS cCount
        FROM
            TEMP .AAAA
        WHERE
            TEMP .AAAA.Id = 'ADDM01201606120001'
        UNION ALL
            SELECT
                    aa,
                    bb,
                c_2 AS cCount
            FROM
                TEMP .AAAA
            WHERE
                TEMP .AAAA.Id = 'ADDM01201606120001'
            UNION ALL
                SELECT
                    aa,
                    bb,
                    c_3 AS cCount
                FROM
                    TEMP .AAAA
                WHERE
                    TEMP .AAAA.Id = 'ADDM01201606120001'
  • 相关阅读:
    14.4.6 Configuring Thread Concurrency for InnoDB 配置Thread 并发
    14.4.5 Configuring InnoDB Change Buffering 配置InnoDB Change Buffering
    14.4.4 Configuring the Memory Allocator for InnoDB InnoDB 配置内存分配器
    timeout connect 10000 # default 10 second time out if a backend is not found
    haproxy 服务端超时时间 timeout server 17000 --后台程序17秒没有响应,返回超时
    Openstack组件部署 — Nova_安装和配置Controller Node
    Openstack组件部署 — Nova_安装和配置Controller Node
    输出和模型使用 2
    输出和模型使用 1
    Openstack组件部署 — Nova overview
  • 原文地址:https://www.cnblogs.com/sunxun/p/5601351.html
Copyright © 2011-2022 走看看