精华内容
下载资源
问答
  • 2022-03-31 09:33:20

    先还是来说下业务场景

    现在有个业务需求,需要根据父类ID(pid),分别找出3条最新的数据展示出来。

    如果使用group by发现每个只能显示一条。

    那么怎么办?

    接下来就是解决现场。

    解决

    解决思路

    1、把符合条件的id串在一起组合成一个新的列

    2、从列里面截取3个子项

    整体SQL

    先直接上方案-SQL:

    SELECT pid,
    SUBSTRING_INDEX(
        GROUP_CONCAT(id) 
        ,','
        ,-3) as ids
    FROM t_info where  1=1   GROUP BY pid

    把符合条件的id串在一起组合成一个新的列

    解决方案:GROUP_CONCAT

    语法

    group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])

    [] 中都是可选择的。例如分隔符,如果不填的话,默认使用逗号分割。

    这个函数的目的,是为了把所有符合group by 结果的行,相关的列组合成一行的一个列,使用逗号把它们串在一起。

    例如执行下面这个的结果就是把id串在一起。

    SELECT pid,GROUP_CONCAT(id) ) as ids
    FROM t_info where  1=1   GROUP BY pid

     通过上面的这个函数,我们解决了把所有符合的列串在一起的功能了。

    从列里面截取3个子项

    接下来是怎么实现只取后面3个了。

    这里一般都是使用截取的功能。

    substring_index是个比较好的函数。使用复数是把匹配的从后面开始计算。因为需求要的是最新的,根据默认排序规则asc。所以最新的在最后面,就使用复数的方式来计算了。

    具体substring_index大家可以看下作者其它的文章

    更多相关内容
  • 示例 修改前:1列多行数据 ...修改后:合并成一列 示例语句 1 2 3 4 5 6 7 8 9 10 11 select 类别, 名称=( stuff( (select','+名称fromTable_Awhere类别=A.类别forxmlpath...

    示例

    修改前:1列多行数据

    修改后:合并成一列

     

    示例语句

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    select
    类别,
         名称 = (
             stuff(
                 ( select  ','  + 名称  from  Table_A  where  类别 = A.类别  for  xml path( '' )),
                 1,
                 1,
                 ''
             )
         )
    from  Table_A  as  group  by  类别

     

    把得到的内容以XML的形式显示

    for xml path('') 

     

    把拼接的内容的第一个“,”去掉

    stuff((select ',' + ep_name from ep_detail where ep_classes = a.ep_classes for xml path('')), 1, 1, '')

    转载于:https://www.cnblogs.com/linjincheng/p/10684845.html

    展开全文
  •   有时为避免循环操作数据库、列表展示等一些原因需要将数据及关联数据批量加载进行集中处理,一种解决办法可以使用FOR XML PATH将多行数据合并成一列,达到字段拼接的效果。例如有两个表,   部门表T_Dept: ...

      有时为避免循环操作数据库、列表展示等一些原因需要将数据及关联数据批量加载进行集中处理,一种解决办法可以使用FOR XML PATH将多行数据合并成一列,达到字段拼接的效果。例如有两个表,

      部门表T_Dept:
    在这里插入图片描述
      员工表T_Emp:
    在这里插入图片描述
      需要查询每个部门下的员工姓名,查询语句:

    1 SELECT ROW_NUMBER() OVER (ORDER BY DeptId) AS Row, DeptName
    2     , LEFT(A.EmpName, LEN(A.EmpName) - 1) AS EmpName
    3 FROM (
    4     SELECT DeptId, EmpName = (
    5             SELECT EmpName + ','
    6             FROM T_Emp emp2
    7             WHERE emp2.DeptId = emp1.DeptId
    8             FOR XML PATH('')
    9         )
    10     FROM T_Emp emp1
    11     GROUP BY emp1.DeptId
    12 ) A
    13     LEFT JOIN T_Dept dept ON dept.Id = A.DeptId
    

      结果集:
    在这里插入图片描述
      也可以这样写:

    1 SELECT ROW_NUMBER() OVER (ORDER BY Id) AS Row, DeptName
    2     , LEFT(A.EmpName, LEN(A.EmpName) - 1) AS EmpName
    3 FROM (
    4     SELECT Id, DeptName, EmpName = (
    5             SELECT EmpName + ','
    6             FROM T_Emp emp1
    7             WHERE emp1.DeptId = dept.Id
    8             FOR XML PATH('')
    9         )
    10     FROM T_Dept dept
    11 ) A
    

      结果集:
    在这里插入图片描述
      SQL脚本:

    1 CREATE TABLE [dbo].[T_Dept](
    2 
    3     [Id] [int] IDENTITY(1,1) NOT NULL,
    4 
    5     [DeptName] [nvarchar](10) NULL,
    6 
    7  CONSTRAINT [PK_T_Dept] PRIMARY KEY CLUSTERED
    8 
    9 (
    10 
    11     [Id] ASC
    12 
    13 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    14 
    15 ) ON [PRIMARY]
    16 
    17 GO
    18 
    19  
    20 
    21 CREATE TABLE [dbo].[T_Emp](
    22 
    23     [Id] [int] IDENTITY(1,1) NOT NULL,
    24 
    25     [DeptId] [int] NULL,
    26 
    27     [EmpName] [nvarchar](10) NULL,
    28 
    29  CONSTRAINT [PK_T_Emp_1] PRIMARY KEY CLUSTERED
    30 
    31 (
    32 
    33     [Id] ASC
    34 
    35 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    36 
    37 ) ON [PRIMARY]
    38 
    39 GO
    40 
    41  
    42 
    43 ALTER TABLE [dbo].[T_Emp]  WITH CHECK ADD  CONSTRAINT [FK_T_Emp_T_Dept] FOREIGN KEY([DeptId])
    44 
    45 REFERENCES [dbo].[T_Dept] ([Id])
    46 
    47 GO
    48 
    49  
    50 
    51 ALTER TABLE [dbo].[T_Emp] CHECK CONSTRAINT [FK_T_Emp_T_Dept]
    52 
    53 GO
    54 
    55  
    56 
    57 INSERT INTO [dbo].[T_Dept]
    58 SELECT '销售部'
    59 UNION ALL
    60 SELECT '研发部'
    61 UNION ALL
    62 SELECT '人力资源部'
    63 UNION ALL
    64 SELECT '行政部'
    65 UNION ALL
    66 SELECT '财务部'
    67 
    68  
    69 
    70 INSERT INTO [dbo].[T_Emp]
    71 SELECT '1', 'Tom'
    72 UNION ALL
    73 SELECT '1', 'John'
    74 UNION ALL
    75 SELECT '2', 'Blue'
    76 UNION ALL
    77 SELECT '2', 'Banks'
    78 UNION ALL
    79 SELECT '3', 'Niki'
    80 UNION ALL
    81 SELECT '3', 'Yuki'
    82 UNION ALL
    83 SELECT '5', '小明'
    
    展开全文
  • Oracle 在数据查询时候,需要把条记录转换成一条完整记录进行操作。这种情况一般分两种,一种是固定个数和数值的合并,另外一种是非固定字段,非固定值的合并。很有用的
  • SQL语句用with将列分割成多列存为临时表,再将多行某个字段拼接合并为一行
  • 首先是源数据: select (CONVERT(varchar(100),cip.CheckIn_StartTime, 23)+' - '+CONVERT(varchar(100),cip.CheckIn_EndTime, 23)+' '+CONVERT(varchar(100),cip.Rental_Price)) as content from CheckInPeriod ...

    首先是源数据:

    select (CONVERT(varchar(100),cip.CheckIn_StartTime, 23)+' - '+CONVERT(varchar(100),cip.CheckIn_EndTime, 23)+' '+CONVERT(varchar(100),cip.Rental_Price)) as content from CheckInPeriod cip 

    然后我们加上合并语句:

    select Stuff((select ',' +Convert(varchar(255),content) from (
    select (CONVERT(varchar(100),cip.CheckIn_StartTime, 23)+' - '+CONVERT(varchar(100),cip.CheckIn_EndTime, 23)+' '+CONVERT(varchar(100),cip.Rental_Price)) as content from CheckInPeriod cip 
    ) tba
    for XML path('')),1,1,'') as content

    结果就是这样的:

    可以自定义各种符号。

     

    转载于:https://www.cnblogs.com/wt-vip/p/8983946.html

    展开全文
  • pg数据库实现多行数据合并成一列

    千次阅读 2021-08-17 14:42:50
    需要将上面这种结果集转行为下图格式: pg9.x版本可以结合分组函数GROUP BY与string_agg(col,'')实现; 具体写法如下: select string_agg(behavior_code,'<...') as behavior_code,factor_code ...
  • mysql> select * from aa;+------+------+| id| name |+------+------+|1 | 10||1 | 20||1 | 20||2 | 20||3 | 200||3 | 500|+------+------+6 rows in set (0.00 sec)以id分组,把name字段的值打印在一行,逗号...
  • excel多列多行数据合成一行或一列

    千次阅读 2021-11-16 15:00:55
    本篇属于经验贴,适用的问题是:需要将excel的多列数据粘贴为一列或者一行 方法:本次解决方法需要下载一个好用的插件,叫做方方格子,强推这个插件,直接搜官网然后下载软件,安装后重启excel任务栏会出现方方格子...
  • SELECT 名称 = ( stuff( ( SELECT ',' + CAST (字段名AS VARCHAR) FROM 表名 WHERE 条件 FOR xml path ('') ), 1,1,...
  • 数据框一行多数据合并成一列 上图合并成 GO %>% mutate(ID = rownames(GO)) -> GO rownames(GO) <- NULL #宽变长 GO %>% pivot_longer(-ID, names_to = " ID", values_to = "GO") -> GO GO &...
  • oracle wm_concat(column)函数使我们经常会使用到的,下面就教您如何使用oraclewm_concat(column)函数实现字段合并,如果您对oracle wm_concat(column)函数使用方面感兴趣的话,不妨一看。 shopping: --------...
  • 一、一列多行数据合并 1.1 在B1单元格输入=A1:A6 ...跟一列多行合并为一个单元格类似 2.1 在D1单元格输入=A1:C1 2.2 然后按F9键 2.3 最后删除{}和"",全量替换即可,根据需要将";“替换为”,"或其他字符。 ...
  • I have a question to merge two columns into one in the same dataframe(start_end), also remove null value. I intend to merge 'Start station' and 'End station' into 'station', and keep 'duration' accord...
  • 怎么将excel中两列转换成多行多列在G1 H1中分入或复制粘列公=INDEX(A:A,INT(ROW(A4)/4))=INDIRECT(ADDRESS(INT(ROW(A4...excle如何将多行重复数据合并到一行多列显示如果你的意思是,将一列多行数据,改为一行多列...
  • MSSQL将多行数据拼接成一列

    千次阅读 2018-07-29 17:32:06
    可以看到StuList里面的数据都会出一个逗号,这时随外层的语句:stuff(StuList,1,1,'') 就是来去掉逗号,并赋予有意义的明! 举例: 链接字段去掉重复值进行连接(子句中加入group by 即可) ...
  • postgresql 自定义聚合函数实现多行数据合并成一列
  • 但是这些数据需要和另外的费用报销系统的数据关联,费用报销系统的费用项目是横向的,用费用项目、金额的多行来表达。那么这里工资的数据如何转换成行呢?在Kettle里面做一个转行的转换就行。参考如下。其中表输入...
  • 原表格是这样 命令后是这样的 网上偷师学来的,但是不能指定日期区间和有很空白行,不知道怎么写了。
  • 在写需求的时候有一个需求需要将签核线的每个人展示出来在table里的一个格子里。...需要合并的列名,'--->')within GROUP(order by t.签核层级(自己改成对应的列名即可)) as name from 表名 t where 条件
  • pandas多行合并成一列

    千次阅读 2019-09-17 18:32:09
    话说有个漂亮的姐姐正在因为一个数据处理问题而发愁,见她柳眉轻蹙,泪眼汪汪的样子,在了解妹子还是单身的情况下,在下主动申请帮助妹子解决问题,过去想妹子询问情况。 原来妹子的需求是这样的! 这里有一个人...
  • select listagg( zdmc, ',' ) within group ( order by jzid ) as zdmc from mzys_zd where 连接条件 GROUP BY jzid; SELECT to_char(wmsys.wm_concat (zdmc)) as zdmc ... FROM mzys_zd where 连接条件 ...
  • SELECT GROUP_CONCAT( label.label_name) FROM mooc_label_relevance relevance
  • 听起来您需要“透视”使用PIVOT sql命令可以旋转和重组数据,尽管我不确定您是否可以将它作为静态查询用于n。在标记表中需要一个额外的id,因此每个ID的每个标记也都有自己的顺序。 所以主要...
  • 快速将多列数据首尾相连成一列 代码如下: data <- c(indv[,n]) for (j in a:b) { data <- c(data,indv[,j]) }
  • USE xxy_test GO SELECT dbo.F_HEBING_CHAQUE('2020-10-28', 'G02', 'PG') CREATE FUNCTION F_HEBING_CHAQUE ( @pln_date VARCHAR(10) , @lines VARCHAR(20) , @cpdl VARCHAR(20) ) RETURNS NVARCHAR(2000) ...
  • 箱号12345合并成 ,1,2,3,4,5create or replace function get_carton_list ( p_pkt_ctrl_nbr in carton_hdr.pkt_ctrl_nbr%type, p_sku_id in carton_hdr.sku_id%type, p_carton_creation_code in carton_hdr.carton_...
  • mysql中将多行数据合并成一行数据

    千次阅读 2021-11-07 10:49:07
    一个字段可能对应数据,用mysql实现将多行数据合并成一行数据 例如:一个活动id(activeId)对应个模块名(modelName),按照一般的sql语句: SELECT am.activeId,m.modelName FROM activemodel am JOIN ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,596
精华内容 3,038
关键字:

多列多行数据合并成一列