万能的D版,求助一个sql查询的问题,高手请进~~~

  • 大部头书
    表结构如下插图
    表结构.png

    三个字段,第一个是群组信息,第二个是id,第三个是属性

    想实现这样一个查询结果,
    想象中的结果.png

    结果用select case when 和group by 查询的时候
    1. select groupName, (case when type='A' then id end), (case when type='B' then id end) from `test` group by groupName;
    复制代码



    查询完竟然是这个:

    查询结果.png


    苍天啊,大地啊,为何有些查询结果是null啊,各位大神求解!~~
  • b
    boyi55
    做个行转列?
  • 大部头书
    回复2#boyi55


    这不是有case when 么,转了貌似丢数据了
  • i
    iamright
    这个一看就比较复杂 等高手来吧
  • b
    boyi55
    有专门的函数处理,一般是pivot unpivot
  • s
    small32
    楼主,不是你不写else,else就不存在的,就是因为存在else,导致会有null的产生

    如果不会用高级函数的话,直接嵌套一层查询就好
  • h
    hesiyu
    1. SELECT
    2. groupName,
    3. MAX(A_ID) AS A_ID,
    4. MAX(B_ID) AS B_ID
    5. FROM
    6. (SELECT
    7. groupName,
    8. CASE type WHEN 'A' THEN id END AS A_ID,
    9. CASE type WHEN 'B' THEN id END AS B_ID
    10. FROM
    11. `test`
    12. ) AS data_tbl
    13. GROUP BY groupName
    复制代码
  • 大部头书
    回复6#small32


    写嵌套查询又怕影像效率……
  • h
    hesiyu
    1. SELECT
    2. groupName,
    3. MAX(CASE type WHEN 'A' THEN id END) AS A_ID,
    4. MAX(CASE type WHEN 'B' THEN id END) AS B_ID
    5. FROM
    6. `test`
    7. GROUP BY groupName
    复制代码
  • p
    pluck
    Select A1.groupname,A1.id,A2.id from (select groupname,id from t1 where ttype='A') A1,(select groupname,id from t1 where ttype='B') A2
    where A1.groupname=A2.groupname

    呃,N久没写SQL了,用的最原始的方法。。。
  • 大部头书
    回复9#hesiyu

    多谢兄dei