我有两个表:一个是programs,另一个是bookprograms
programs表是获取程序名称的位置。可以添加或编辑此表中的行。

我使用下面的查询,但它不能反映是否有新程序:

SELECT  MAX(IF(programs = 'cla', title, NULL)) cla,
    MAX(IF(programs = 'csm', title, NULL)) csm
FROM    bookprograms
GROUP BY title


第一个表的结构。

╦════════════╦═════════════╗
║ ID         ║   Programs  ║
╬════════════╬═════════════╣
║ 1          ║     cla     ║
║ 2          ║     csm     ║
╩════════════╩═════════════╝


第二张表是我存储书籍和与其对应的程序的地方。

╦════════════╦═════════════╗
║ Title      ║   Programs  ║
╬════════════╬═════════════╣
║ title1     ║     cla     ║
║ title2     ║     csm     ║
║ title3     ║     cla     ║
╩════════════╩═════════════╝


我将如何得出这个结果?

╦════════════╦═════════════╗
║ cla        ║   csm       ║
╬════════════╬═════════════╣
║ title1     ║   title     ║
║ title3     ║             ║
╩════════════╩═════════════╝

最佳答案

此查询返回所需的数据,但格式不完全符合所需格式:

SELECT programs, GROUP_CONCAT(title) AS titles
FROM bookprograms
GROUP BY programs


它返回:

 programs | titles
----------+---------------
 cla      | title1,title3
 cls      | title2


在客户端代码中,您可以将其变形为所需的结构。标题单元格的值在字段programs中返回。用逗号(title)分隔字段,的值,您将拥有该列其余部分的数据单元格。对结果集中的每一行重复此操作,以获取所需表的所有列。

关于mysql - 将动态行转置为列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28073112/

10-13 02:16