精华内容
下载资源
问答
  • sql语句合并字段

    千次阅读 2014-06-12 14:15:25
    以前用过很复杂的sql语句

    以前用过很复杂的sql语句,几年过去了,忘光了,要用的时候完全想不起来

    记录一个以备忘:

    select * from ( select * from t1 )  as t3, ( select * from t2 ) as t4 where t3.f1 = t4.f2

    展开全文
  • 主要介绍了分组字符合并SQL语句 按某字段合并字符串之一(简单合并),需要的朋友可以参考下
  • SQL Server中的字段合并

    万次阅读 2017-09-30 10:48:18
    在查询语句编写过程中,常常会遇到将ID相同的几个字段合并到一个字段的情况,今天就给大家分享在SQL Server中的字段进行合并的操作。 我们以合并打卡记录的例子来说明怎么合并。 我们来看下面两个截图,图一是原始...

    在查询语句编写过程中,常常会遇到将ID相同的几个字段合并到一个字段的情况,今天就给大家分享在SQL Server中的字段进行合并的操作。

    我们以合并打卡记录的例子来说明怎么合并。


    我们来看下面两个截图,图一是原始的打卡记录表,EmpID表示员工的ID,该表记录了每个员工每次打卡的时间。每打一次卡就生成一行记录。

    直接展示或导出图一的记录,就会不直观,不好看,如果变成图二那样的格式展示和导出就好看了,每个员工每一天的打卡记录都一目了然。没有打卡的日期,打卡记录就用null表示。


                                                   

                                   图一(原始的打开记录)    


               

                                        图二(展示的打卡记录)


    下面就举例说明怎样将图一的原始表数据加工成图二的结果展示。


    1,首先创建测试用的表,并插入数据。代码如下:

    ---员工信息表
    CREATE TABLE Employee (
    id INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
    EmpID INT NOT NULL,
    EmpName NVARCHAR(50)     
    )

    INSERT INTO dbo.Employee (EmpID ,EmpName)
    SELECT 10001,'张三' UNION ALL
    SELECT 10002,'李四'


    ---打卡记录表
    CREATE TABLE CARD_RECORD (
        id INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
        EmpID INT NOT NULL,
        FDateTime DATETIME NOT NULL
    )
    GO

    INSERT INTO CARD_RECORD (EmpID,FDateTime)
    SELECT '10001','2017-09-01 08:21'
    UNION ALL
    SELECT '10002','2017-09-01 08:22'
    UNION ALL
    SELECT '10001','2017-09-01 12:00'
    UNION ALL
    SELECT '10002','2017-09-01 12:01'
    UNION ALL
    SELECT '10001','2017-09-01 13:00'
    UNION ALL
    SELECT '10002','2017-09-01 13:01'
    UNION ALL
    SELECT '10002','2017-09-01 18:05'
    UNION ALL
    SELECT '10001','2017-09-01 18:12'
    UNION ALL
    SELECT '10002','2017-09-02 08:31'
    UNION ALL
    SELECT '10001','2017-09-02 08:42'
    UNION ALL
    SELECT '10001','2017-09-02 12:10'
    UNION ALL
    SELECT '10002','2017-09-02 12:11'
    UNION ALL
    SELECT '10001','2017-09-02 13:00'
    UNION ALL
    SELECT '10002','2017-09-02 13:11'
    UNION ALL
    SELECT '10001','2017-09-02 18:05'
    UNION ALL
    SELECT '10002','2017-09-02 18:12'
    UNION ALL
    SELECT '10002','2017-09-02 19:34'
    UNION ALL
    SELECT '10001','2017-09-03 08:36'
    UNION ALL
    SELECT '10002','2017-09-03 08:40'
    UNION ALL
    SELECT '10001','2017-09-03 12:20'
    UNION ALL
    SELECT '10002','2017-09-03 12:20'
    UNION ALL
    SELECT '10001','2017-09-03 12:55'
    UNION ALL
    SELECT '10002','2017-09-03 12:56'
    UNION ALL
    SELECT '10001','2017-09-03 18:05'
    UNION ALL
    SELECT '10001','2017-09-05 08:05'
    UNION ALL
    SELECT '10001','2017-09-05 12:30'
    UNION ALL
    SELECT '10001','2017-09-05 13:02'
    UNION ALL
    SELECT '10001','2017-09-05 18:10'
    GO


    2,合并每个员工的打卡时间到一个字段内

    合并打卡时间,我们使用 STUFF() 函数结合 For xml path 参数来对员工的打卡时间进行合并。语句如下:

    ----加工打卡记录表,将打卡时间合并到一个字段里面

    SELECT a.EmpID,CAST(a.FDateTime AS DATE) dates,

    times= STUFF( ( SELECT ','+ CONVERT(VARCHAR(5),FDateTime,108) FROM dbo.CARD_RECORD 

    WHERE CAST(FDateTime AS DATE)= CAST(a.FDateTime AS DATE) AND EmpID=a.empid FOR XML PATH('') ) ,1,1,'')

    FROM dbo.CARD_RECORD a 

    --- WHERE  真实使用时,这里需要加where条件,查询一段时间内的打卡记录,否则查询出来的就是全部的打卡记录

    GROUP BY a.EmpID,CAST(a.FDateTime AS DATE)


    得到的结果如下图所示:


    说明:原始的打卡记录,是datetime型的,包含“年月日”和“时间”两部分,但在展示的时候“年月日”和“时间”是分开的,只需要将“时间”合并,“年月日”不需要合并,所以合并的是datetime型的“时间”部分。通过转换函数:CONVERT(VARCHAR(5),FDateTime,108)  即得到了FDateTime的“时间”的那部分。而CAST(a.FDateTime AS DATE) 是将FDateTime转换为Date型,Date型只有“年月日”,没有后面的“时间”。


    简单来说明一下 STUFF()  函数结合 For xml path 参数是怎么实现字段合并的:

    假如有这样一张表,表名是 Table_A


     我想把它变成下面的格式:



    实现代码如下:

    select 	类别, 
    	名称 = ( stuff(
    			(select ',' + 名称 from Table_A where 类别 = A.类别 for xml path('')),
    			1,
    			1,
    			''
    			)
    	        ) 
    from Table_A as A group by 类别
    
    
    
    for xml path('') 
    这句是把得到的内容以XML的形式显示。
    stuff((select ',' + ep_name from ep_detail where ep_classes = a.ep_classes for xml path('')), 1, 1, '')
    这句是把拼接的内容的第一个“,”去掉
    

    3,构建日期

    在完成第二步的时候,我们发现,员工打卡的日期是不完整的,没有打卡记录的那一天是没有记录的,我们需要将没有记录的那一天也展示出来,就需要构建当天的日期。

    构建日期我们使用 Master 数据库中的系统表 spt_values 来生成连续的日期。代码如下:

    declare @StartDate DATE = '2017-09-01'
    declare @EndDate DATE ='2017-09-05'

    --利用master库spt_values表构建时间,关联员工信息表,将每个员工附上构建的时间
    SELECT b.EmpID,b.EmpName,dateadd(day,a.number,@StartDate) as dates
    from master.dbo.spt_values a CROSS APPLY dbo.Employee b  
    WHERE a.type ='P' and a.number <=DATEDIFF(day, @StartDate, @EndDate)


    查询结果如下所示:




    这样每个员工就给他构建了查询范围内连续的日期。将第二步和第三步查询的结果整合,就可以得到最终的结果。


    整合后完整的代码如下:

    /***查询数据***/
    declare @StartDate DATE = '2017-09-01'       ----查询的开始日期
    declare @EndDate DATE ='2017-09-05'         ----查询的结束日期


    SELECT aa.EmpID,aa.EmpName,aa.dates,bb.times
    FROM (
    --利用master库spt_values表构建时间,关联员工信息表,将每个员工附上构建的时间
    SELECT b.EmpID,b.EmpName,dateadd(day,a.number,@StartDate) as dates
    from master.dbo.spt_values a CROSS APPLY dbo.Employee b  
    WHERE a.type ='P' and a.number <=DATEDIFF(day, @StartDate, @EndDate)
    ) aa LEFT JOIN (
    --加工打卡记录表,将打卡时间合并到一个字段里面
    SELECT a.EmpID,CAST(a.FDateTime AS DATE) dates,
    times= STUFF( ( SELECT ','+ CONVERT(VARCHAR(5),FDateTime,108) FROM dbo.CARD_RECORD WHERE CAST(FDateTime AS DATE)= CAST(a.FDateTime AS DATE) AND EmpID=a.empid FOR XML PATH('') ) ,1,1,'')
    FROM dbo.CARD_RECORD a 
    WHERE a.FDateTime >= @StartDate AND a.FDateTime <= @EndDate
    GROUP BY a.EmpID,CAST(a.FDateTime AS DATE)
    ) bb ON aa.EmpID=bb.EmpID AND aa.dates=bb.dates


    这样,我们就能得到 9月1日至 9月5日的员工打卡记录,当天如果没有打卡记录,则显示为null,而且日期也是连续的显示出来。


    希望以上方法能够帮助到大家。










    展开全文
  • 有时候会遇到这种情况,数据库查询返回多行记录,且每行记录由另外符合条件的多条记录内容合并,遇到这种情况,我们可以选择下面两种方式
  • SQL字段合并

    千次阅读 2019-05-31 18:12:31
    如何将两个字段合成一个字段显示(oracle和sqlserver的区别) @ sql server中如何合并(用Cast()函数) --1、创建模拟的数据表--- create table GoodsCate( Mid int not null, Code varchar(10) not null, Name ...

    如何将两个字段合成一个字段显示(oracle和sqlserver的区别)

    @

    • sql server中如何合并(用Cast()函数)
    --1、创建模拟的数据表---
    create table GoodsCate(
        Mid int not null,
        Code varchar(10) not null,
        Name varchar(20) not null,
    )
    --2、添加模拟数据--
    insert into GoodsCate(Mid,Code,Name) values(1,'6801','电子仪器')
    insert into GoodsCate(Mid,Code,Name) values(2,'6802','激光仪器')
    insert into GoodsCate(Mid,Code,Name) values(3,'6803','扫描仪器')
    --3、未合并的结果--
    select * from GoodsCate
    --4、sqlserver中的合并--
    **select (CAST(Code as varchar(20))+'_'+CAST(Name as varchar(20))) 合并结果集 from GoodsCate**
    
    • 在oracle中如何合并数据(用Concat()函数)
    --1、创建模拟的数据表 ---
    create table GoodsCate(
        MID INTEGER not null,
        CODE NVARCHAR2(100) not null,
        NAME NVARCHAR2(100) not null
    )
    --2 、添加模拟数据 --
    insert into GoodsCate(Mid,Code,Name) values(1,'6801','电子仪器')
    insert into GoodsCate(Mid,Code,Name) values(2,'6802','激光仪器')
    insert into GoodsCate(Mid,Code,Name) values(3,'6803','扫描仪器')
    --3 、未合并的结果 --
    select * from GoodsCate
    --4 、oracle 中的合并--
    **select (Concat(Concat(CODE,'_'),NAME)) 合并结果集 from GoodsCate**
    

    转自:(https://www.cnblogs.com/xielong/p/8708326.html)

    挺好用的,

    展开全文
  • SQL语句合并语句

    2018-09-05 16:34:00
    SQL】update时concat和replace的用法 ...sql 语句:update 表名 set title=concat( title, '123') where id=1; 结果 id title  1 abc 更新后 1 abc123 ②replace 替换原有字段内容里的值 sql ...

    【SQL】update时concat和replace的用法

     

    ①concat在原有的基础上追加内容

    sql 语句:update 表名 set title=concat( title, '123') where id=1;

    结果   id   title

        1     abc

    更新后   1     abc123

    ②replace 替换原有字段内容里的值  

    sql 语句:update 表名 set title=replace( title, 'abc', 'cdef') where id=1;

    结果  id     title

        1   abcggg

    更新后 1     cdefggg

    转载于:https://www.cnblogs.com/ordinaryk/p/9592964.html

    展开全文
  • 比如: ID Name Age Money 1 张三 19 50 2 李四 20 30 ...希望查询到合并后的数据,根据Age相同的数据,进行合并,然后相同数据中的Money值相加,那位大神能给一下能够运行的SQL语句(Mysql)
  • SQL语句字段拼成一个字段显示

    万次阅读 2017-06-08 10:36:02
    1.只是两个字段进行拼接 select a || b from table 2.拼接时在中间或末尾加上内容 头部加:select '字段1' || a || b from table 中间加:select a || '中间' || b from table ...注: 在SQL语句中 || 就相当于程序中
  • 有表如下: id in out index ...这三个字段均为integer类型 ...为满足以上的要求:设计的SQL语句如下(假设表名为tab) 代码如下:select id,sum(in) as in,sum(out) as out from tab where index=2 group
  • 案例:将 Albums 字段相同的数据的 PhotoUrl 字段 拼接到...二、sql 语句(为了方便 我加了一个条件[Albums=783] ) select photourl=stuff((select top(9) ';'+photourl from Photos p where p.Albums=783 ...
  • 数据库版本:sql server 2012 测试数据库:Northwind,安装方法请参考这篇文章 二、重命名查询结果列(字段) “Employees”表中的结构 现在查询“LastName”和“FirstName”,并重命名 SELECT LastName as LN,...
  • Access操作与SQL语句:数据合并

    千次阅读 2020-05-04 17:17:43
    数据处理是根据数据分析的目的...横向合并,就是从多个表中,根据各表共有的字段,把个表所需的记录一一对应起来。相当于Excel中的VLOOUP函数。 我们之前导入了“订购明细”表,它只记录了用户订购单的信息,而用户...
  • 简单的 SQL分组合并字段

    千次阅读 2012-12-20 10:09:22
    一个简单的sql分组合并字段 ----------------------------------创建表添加数据------------------------------- if object_id('tb') is not null drop table tb go create table tb(id int, [value] varchar...
  • SQL函数将某个字段合并在一起

    千次阅读 2018-04-17 17:07:03
    最近遇到需要将关联表中的某个字段全部查询出来并且重新组合为一个字段,这个时候普通的连接查询就满足不了需求了,需要用到SQL函数来完成: ALTER function dbo.getResCodesByOwnerId(@OwnerId INT) returns ...
  • 字段名称可以不同,字段数量、数据类型、顺序必须相同。这样查出来的数据才是对的。 如果字段数量不同 但是如果字段名称不同(as 别名也算...UNION 操作符用于合并两个或多个 SELECT 语句的结果集。 需要注意...
  • 按name字段分组,合并house,aaa字段* 合并数据后的缺点就是有重复的的,这个是本人接受不了的,限于技术有限,只能凑合的用了,业务要求多,技术不过关哎。。。 建表 CREATE TABLE ttable ( id bigint NOT NULL ...
  • SQL语句中Update和Insert语句合并

    千次阅读 2020-09-15 15:26:29
    在实际开发中,经常遇到更新和插入操作,很多时候,我们会将两个方法的sql合并为一个,即可以实现插入操作,也可以实现更新操作,下面给与详细的示例 sql实例 mapper方法: Integer batchUpdatePilicoinAward(List ...
  • 例子代码: select * from person where cast(lrrq_year as varchar(10))+'-'+cast(lrrq_month as varchar(10)) = '2016-08' 上面的例子中的lrrq_year、lrry_month都是int类型的,所以...select 字段A(字符型)+
  • 通常情况下我们写sql语句主键都是唯一的不会出现id重复的问题。如: 查询表table1的所有数据 select * from table1 会显示出table1中所有字段列表。 select count(*) as count from table1 统计table表中数据总数也...
  • 一条sql语句添加多个字段

    千次阅读 2020-07-28 18:19:57
    Forbiden: Merge the alter statement for table 'app_info' to ONE. 需要给表中添加两个字段,之前写了两句: alter table app_info add software_copy_right text...如何把alter操作合并为一条sql语句: alter t..
  • SELECT YEAR(签单时间) AS 年份,SUM(签单金额) AS 签单总金额 FROM table1 ...如何用sql语句实现直接生成表 年份 签单总金额 收款总金额 2011 1111111 222222 2012 2222222 333333 2013 3333333 222222
  • 需求驱动 为了使得表格更好看些,我需要把查询结果合在一起,这样看起来就是一体的了。主要是性能测试有需求: 1、查询当前库设备 ...查询语句: SELECT count(1) "在库设备" FROM "public"."t_cloud_de...
  • select 名称 = ( stuff( (select ',' + CAST(字段名AS VARCHAR) from 表名 where 条件 for xml path('')), 1, 1, '' ) )
  • 数据库表结构: 数据库两个字段合并成一个字段的值并其中一个字段的新值的Sql语句: UPDATE Students SET SName=(select RTRIM(SName))+(select LTRIM(SAddress))
  • substring(列名,index,length)
  • SQL两列字段合并为一个字符串

    千次阅读 2020-05-11 15:52:10
    select concat(concat(first_name,' '),last_name) as name FROM b_sys_user 其中first_namelast_name为要合并字段
  • 就是sql表中如果字段类型为字符串类型,而我们在写sql语句的时候用的确实整型的时候。在性能上会出现问题。接下来我们来看测试表结构如下:CREATE TABLE `order` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '...
  • sql语句: select a.sales_order_no, REPLACE(GROUP_CONCAT(a.external_order_no),’,’,’ / ‘) as external_order_no, REPLACE(GROUP_CONCAT(a.original_order_no),’,’,’ / ') as original_order_no from ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 81,317
精华内容 32,526
关键字:

sql语句合并字段