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

如何在SQL中的单行内串联多行?

丁宏盛
2023-03-14
问题内容

如何使用SQL将多行连接成一行?我的数据库是DB2

TableFoo
 -------
 Id      Name
 1       Apples
 1       Tomatoes
 1       Potatoes
 2       Banana
 2       Peach

我想要类似的东西

ID       FruitsAvailable
-------------------------
 1       Apples, Tomatoes, Potatoes

问题答案:

试试这个

  SELECT id ,FruitsAvailable 
  FROM
      (SELECT id , group_concat(Name) as FruitsAvailable 
       FROM  TableFoo
       WHERE id = 1) t

这里演示SQLFIDDLE

编辑:在db2中,您需要创建函数,然后调用它

 CREATE FUNCTION MySchema/MyUDF (
PARCol2 CHAR(5) )
RETURNS VARCHAR(1024)   
LANGUAGE SQL 
NOT DETERMINISTIC 
READS SQL DATA 
CALLED ON NULL INPUT 
DISALLOW PARALLEL

 BEGIN 
  DECLARE ReturnVal VARCHAR(1024) NOT NULL DEFAULT '';

  FOR CsrC1 AS C1 CURSOR 
      FOR SELECT MyCol1 
             FROM MyTable 
             WHERE MyCol2 = ParCol2 
      DO SET ReturnVal = ReturnVal Concat CsrC1.MyCol1; 
  END FOR;

  RETURN LTRIM(ReturnVal); 
 END  ;

然后在这里叫

     Select  id, MyUDF(Name) as FruitsAvailable
     From TableFoo 
     where id = 1


 类似资料:
  • 问题内容: 我有以下查询,该查询返回所有员工的薪水。这项工作正常,但我需要收集将汇总到一个单元格中的额外数据(请参见结果集2)。 如何将数据汇总到逗号分隔的列表中?有点像Sum所做的事情,但是我需要一个字符串作为回报。 结果集1 我需要: 结果集2 问题答案: 对于SQL Server 2005+,请使用STUFF函数和FOR XML PATH: 但是您缺少有关要转换为逗号分隔的字符串的数据的位置

  • 问题内容: 我有例如以下表格数据: 现在,我需要一个 选择, 该 选择返回我的文本列中的所有电子邮件地址 (只检查括号即可),并且如果文本列中有多个地址,则返回多个行。我知道如何提取第一个元素,但是对如何找到第二个和更多结果完全一无所知。 问题答案: 您可以递归使用cte去除字符串。 结果

  • 问题内容: 我正在将MS-Access 2003与查询创建者一起使用。我从一个表()中选择所有内容,然后从另一表()中选择一个特定行()。我想从第二个表中选择另一行并将其连接起来。 查询 该查询的确在ID(字段)与where匹配的地方添加了字段。它像一种魅力。但是,我想在结果中添加另一行。我想获得行所在的位置(该部分实际上在工作)和行所在的位置。我将得到2行,并且当我要求()时,我希望将这两行连接

  • 问题内容: 说我们有一张桌子 我们可以在SQL中通过发出单个查询而不用在后端代码中循环进行联接来检索跨行的字段的连接吗? 就像是 应该给像这样的结果 问题答案: 如果使用MySQL,则可以使用GROUP_CONCAT:

  • 问题内容: 我正在寻找一种在多行Python字符串中使用变量的干净方法。假设我想执行以下操作: 我正在寻找是否有与Perl中类似的东西来指示Python语法中的变量。 如果不是-用变量创建多行字符串的最干净方法是什么? 问题答案: 常用的方法是函数: 它可以与多行格式字符串一起正常工作: 您还可以传递带有变量的字典: 在语法上,最接近您要求的是模板字符串。例如: 我应该补充一点,尽管该功能更为常见

  • 问题内容: 当每个表只有340行时,以下查询将返回> 7000行。 为什么会这样?如果INNER JOIN仅在两个表中都有匹配项时才返回一行,那么为什么要为匹配项返回多行。 问题答案: 如果有一个以上的行具有相同的价值为相同的价值,那么你会得到重复的行,反之亦然。