需要将行合并为两列

lmvvr0a8  于 2021-06-19  发布在  Mysql
关注(0)|答案(3)|浏览(318)

请建议如何进行sql查询以便从该表中获取

  1. ID|Number|Type|
  2. ----------------
  3. 1 |AA1 |IN |
  4. 2 |AA2 |OUT |
  5. 3 |AA3 |IN |
  6. 4 |AA4 |OUT |
  7. into this result
  8. ID| IN | OUT |
  9. -------------------
  10. 1 | AA1 | AA2 |
  11. 2 | AA3 | AA4 |
  12. Thanks
vhmi4jdf

vhmi4jdf1#

您可以使用会话变量模拟类似行号的功能。我们在两个派生表中分别得到所有的输入和输出,并做一个 LEFT JOIN 在他们身上,得到想要的输出。
这甚至适用于 IN 以及 OUT 不是连续的。它还将处理有争议的案件 IN 没有 OUT .
如果有一个 OUT 没有 IN .
尝试以下查询:

  1. SET @row_no_1 = 0;
  2. SET @row_no_2 = 0;
  3. SELECT
  4. t1.row_no AS ID, t1.Number AS `IN`, t2.Number AS `OUT`
  5. FROM
  6. (SELECT
  7. @row_no_1:=@row_no_1 + 1 AS row_no, Number
  8. FROM
  9. `your_table`
  10. WHERE
  11. Type = 'IN'
  12. ORDER BY id ASC) AS t1
  13. LEFT JOIN
  14. (SELECT
  15. @row_no_2:=@row_no_2 + 1 AS row_no, Number
  16. FROM
  17. `your_table`
  18. WHERE
  19. Type = 'OUT'
  20. ORDER BY id ASC) AS t2 ON t2.row_no = t1.row_no
展开查看全部
u3r8eeie

u3r8eeie2#

这将使用隐式连接。
它将使用mysql会话变量。作为参考,你可以阅读http://www.mysqltutorial.org/mysql-variables/ 用于会话变量。

  1. SET @row_number = 0;
  2. SET @row_number2 = 0;
  3. SELECT
  4. out_table.OUTs AS outs, in_table.Ins as INs FROM
  5. (SELECT
  6. (@row_number2:=@row_number2 + 1) AS num2, Number as OUTs FROM your_table WHERE your_table.Type = 'OUT') as out_table ,
  7. (SELECT
  8. (@row_number:=@row_number + 1) AS num1, Number as Ins FROM your_table WHERE your_table.Type = 'IN') as in_table
  9. WHERE num2 = num1
pinkon5k

pinkon5k3#

回答我自己。。。

  1. SELECT a.ID
  2. MAX(CASE WHEN a.type = "IN" THEN a.Number ELSE "" END) AS IN_Type,
  3. MAX(CASE WHEN b.type = "IN" THEN b.Number ELSE "" END) AS Out_Type
  4. FROM table1 a Left join table1 b on a.ID = b.ID
  5. Group by a.ID

相关问题