当前位置: 首页 > 面试题库 >

在单个表中仅在一行中添加多行

史烨
2023-03-14
问题内容

我怎样才能通过mysql仅在一行中加入多行?

例子 :

学生表

Sno.| Name  |  Subjects
1.  | ABC   |  English
2.  | ABC   |  Mathematics
3.  | ABC   |  Science
4.  | FMC |  French
5.  | ABC   |  Russian
6.  | JBC   |  French

现在我想要这种格式

Sno.| Name |   Sub1 |  Sub2 | Sub3 |  Sub4 |
1.  | ABC |   Eng  |  Maths| Science| Russian
2.  | FMC |    French| Null| Null   | Null
3.  | JBC |   French| Null | Null   | Null

我不确定该怎么做?我应该创建视图还是表格?

我想一个观点会很好。


问题答案:

我同意其他答案,即GROUP_CONCAT与PHP一起使用逗号分隔的值进行拆分可能是最好的方法,但是,如果由于任何其他原因需要通过Pure
SQL建议的输出,则建议使用以下方法之一。

1.自我加入

SELECT  t1.Name, 
        MIN(t1.Subject) AS Sub1,
        MIN(t2.Subject) AS Sub2,
        MIN(t3.Subject) AS Sub3,
        MIN(t4.Subject) AS Sub4
FROM    Students t1
        LEFT JOIN Students T2 
            ON t1.Name = t2.Name 
            AND t2.Subject > t1.Subject
        LEFT JOIN Students T3 
            ON t2.Name = t3.Name 
            AND t3.Subject > t2.Subject
        LEFT JOIN Students T4 
            ON t3.Name = t4.Name 
            AND t4.Subject > t3.Subject
GROUP BY t1.Name;

2.使用ROW_NUMBER类型函数进行汇总

SELECT   Name,
         MAX(IF(RowNum = 1,Subject, NULL)) AS Sub1,
         MAX(IF(RowNum = 2,Subject, NULL)) AS Sub2,
         MAX(IF(RowNum = 3,Subject, NULL)) AS Sub3,
         MAX(IF(RowNum = 4,Subject, NULL)) AS Sub4
FROM     (    SELECT   Name,
                       Subject,
                       @r:= IF(@Name = Name, @r + 1, 1) AS RowNum,
                       @Name:= Name AS Name2
              FROM    Students,
                      (SELECT @Name:='') n,
                      (SELECT @r:= 0) r
              ORDER BY Name, Sno
          ) t
GROUP BY Name


 类似资料:
  • 问题内容: 我必须按照下面显示的方式创建一个表。我们可以这样创建吗?(如是) 表名称:样本 其中包含多个值的类别归档。 以及我们如何搜索类别4出现在表格的哪一行。 问题答案: 您无法创建嵌套表。而且您想到的并不是设计这样的桌子的好主意。您应该有两个表(如果是category,则恰好三个 表 包含描述)。一个用于,第二个表保存 每个产品 的 类别 。示例设计如下所示, 和填充样本记录 SQLFidd

  • 在所有的例子代码中,我们在引导过程中通过 handler() 或childHandler() 都只添加了一个 ChannelHandler 实例,对于简单的程序可能足够,但是对于复杂的程序则无法满足需求。例如,某个程序必须支持多个协议,如 HTTP、WebSocket。若在一个 ChannelHandle r中处理这些协议将导致一个庞大而复杂的 ChannelHandler。Netty 通过添加多

  • 我正在尝试在我的列表中显示在EditText中收集的3个数据。在执行按钮时。如果有3个字段要添加,它们将单独存储给我。我可以在我的代码中做些什么来使其统一为列表中的单个字段?示例:姓名:薛西斯年龄:14描述罪行:当我离开学校时,他朝我吐口水。 当您点击保存按钮时: 你所期待的Jorge 14当我离开学校时,他向我吐口水(列表中的一行)现在发生的事情Jorge 14当我离开学校时,他向我吐口水。(列

  • 问题内容: jQuery在表中添加最后一行作为最后一行的最佳方法是什么? 这可以接受吗? 您可以向这样的表中添加什么内容(例如输入,选择,行数)是否有限制? 问题答案: 您所建议的方法并不能保证能为您提供所需的结果- 例如,如果有,该怎么办? 您将得到以下结果: 因此,我建议使用这种方法: 只要方法是有效的HTML,就可以在方法中包括任何内容,包括上面示例中的多行。 更新: 在最近对该问题进行的活

  • 本文向大家介绍在内部表中添加行并在SAP ABAP中添加标题行,包括了在内部表中添加行并在SAP ABAP中添加标题行的使用技巧和注意事项,需要的朋友参考一下 请注意,不应将标题与内部表一起使用。使用时,in_table2的标头为空。使用循环将其打印如下- 当您具有带有内部表的标头时,不应以相同的方式使用它。您应该使用字段符号进行循环并像这样附加-

  • 我是java新手,正在努力克服它。我有类似(< code>String URL,int Score)的数据,我想在数组列表中实现它。我研究了如何在< code>ArrayList或< code>LinkedList中实现多种类型的变量,发现解决方案是从超类创建子类,我创建了这个子类: 我的超级班是: 当我尝试使用添加对象时,我遇到了错误?该错误说: 类型ArrayList中的add(int,MyS