首页 > 数据库 >多个Sql字段拼接为一个字段,并判断是否为空,为空时赋默认值

多个Sql字段拼接为一个字段,并判断是否为空,为空时赋默认值

时间:2023-05-05 17:23:13浏览次数:38  
标签:ReservoirID -- ReservoirName 拼接 为空 Sql 默认值 where select

在这里记录一下怕后面自己忘了, 直接看代码吧 ,这是我数据库需要查询的两张表

--库区表
  select* from Reservoir

--仓库表
  select * from Warehouse

 需要的效果是将同一库区下的仓库的仓库名合并到同一字段中在进行查询,就是下图的效果

 --将多个查询出的字段拼接到一个字段中  
select c.ReservoirID,c.ReservoirName,c.ReservoirRemark,
--在这里用到了Sql中的stuff函数
   -- STUFF字符串函数是将字符串插入到另一个字符串中。
   --它会删除开始位置第一个字符串中的指定长度的字符,然后将第二个字符串插入到开始位置的第一个字符串中
                 stuff(
                 --这里查询是需要拼接的数据并在拼接是以","隔开
                 (select ','+WarehouseName from
                 --从这个里面查询需要出拼接数据的来源并
               (select r.ReservoirID,r.ReservoirName,w.WarehouseID, w.WarehouseName from Warehouse w,Reservoir r where w.ReservoirID=r.ReservoirID ) a
                where a.ReservoirID=c.ReservoirID 
               --把得到的内容以XML的形式显示,并把把拼接的内容的第一个","去掉
                for xml path('')),1,1,'') as WRNames
                --最后把以拼接的数据和其他数据一起查出来就是了
                from (select w.WarehouseID,w.WarehouseName,w.ReservoirID,r.ReservoirName,r.ReservoirRemark from Warehouse w,Reservoir r 
                where w.ReservoirID=r.ReservoirID) c
               group by c.ReservoirID,c.ReservoirName,c.ReservoirRemark

 但是上面这个查法会出现,如果数据没有关联上时,没有关联的数据就会直接查不出来,然后我又把方法改了一下

    select 
      --将查出拼接的数据进行判断长度为0时
    case when  len(
    这里时上面的方法里写的查询并凭借方法
    (select stuff((select ','+WarehouseName from 
     (select r.ReservoirID,r.ReservoirName,w.WarehouseID, w.WarehouseName from Warehouse w,Reservoir r where w.ReservoirID=r.ReservoirID )
     a where a.ReservoirID=c.ReservoirID for xml path('')),1,1,'') as WRNames))=0
     --为其赋一个默认值
     then '该库区没有下属仓库'  
     --将查出拼接的数据进行判断为空时,
         else isnull(   
                   --这里时上面的方法里写的查询并凭借方法
  (select stuff(
             (select ','+WarehouseName from 
             (select r.ReservoirID,r.ReservoirName,w.WarehouseID, w.WarehouseName from Warehouse w,Reservoir r  where w.ReservoirID=r.ReservoirID ) as a 
             where a.ReservoirID=c.ReservoirID for xml path('')),1,1,'') as WRNames), 
            --条件成立时,赋默认值 
              '该库区没有下属仓库') 
              --最后进行整体查询
             end as WRNames,c.ReservoirID,c.ReservoirName,c.ReservoirRemark from 
                 (select * from Reservoir r ) as c
             group by c.ReservoirID,c.ReservoirName,c.ReservoirRemark

 

最后得到结果就是我需要的结果

 此查询关键在于STUFF() 函数用于删除指定长度的字符,并可以在指定的起点处插入另一组字符,一般使用为:STUFF(字符串,从1开始计算字符开始位置,要删除的字符数,要重新插入的字符串)

 

STUFF('测试添加的',3,2,'修改')--测试修改的

 

标签:ReservoirID,--,ReservoirName,拼接,为空,Sql,默认值,where,select
From: https://www.cnblogs.com/lwk9527/p/17374704.html

相关文章

  • MySQL查出所有的主外键关系、级联关系,并记录起来,删除所有的外键关系,根据记录重新建立
    查出所有的主外键关系并记录起来可以通过查询information_schema数据库中的REFERENTIAL_CONSTRAINTS表来获取所有的主外键关系。以下是查询语句:`SELECTK.CONSTRAINT_NAME,--外键约束名K.TABLE_NAME,--子表外键所在表名K.COLUMN_NAME,--外键所在列名......
  • MySQL 8.0关闭binlog
    MySQL8.0关闭binlog默认开启binlog,即使在my.ini或my.cnf的[mysqld]部分没有log_bin或log_bin=mysql-binbinlog默认在Linux的/var/lib/mysql目录下,文件名为binlog.000001格式,在Windows的data目录下,文件名为binlog.000001格式相当于默认有log_bin=binlog参数如果需要关闭......
  • 【解决】mysql本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用
    在计算机管理中启动时,发现mysql报错:mysql本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止。该问题的解决方式为:1找到Mysql的安装路径,看看有没有data文件夹,如果没有data文件夹,自己重新建一个;如果有的话,就把里面的内容全部清空,但保留该目录......
  • Mysql大概内容记录,慢慢加
    Mysql的事务特性以及隔离级别(整理了部分锁、MVCC的内容)因为部分是整理<参考资料>中的博文内容,侵删!四大特性Atomicity:原子性原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。......
  • SQL Server事务执行过程中中释放锁导致的死锁问题 - 排查与分析
    0.前情提要系统的某个用来上报数据的接口存在死锁的问题。这个接口内部对多张表进行了Update操作,执行顺序为A表、B表、C表、D表、A表。死锁发生的SQL,一条是第一次更新A表的SQL,另一条是第二次更新A表的SQL。整个更新都处在一个事务内,理论上讲,只要第一个Session开始执行事务,第二个......
  • SqlServer常用函数及时间处理
    YEAR() 函数返回一个整数值,它表示指定日期的年份,一般使用为:Year(时间),如:YEAR('2023-03-1416:50:08.543')--2023REPLACE() 字符串替换函数,一般使用为:REPLACE(被搜索字符串,需要替换的字符串,替换值),如:REPLACE('测试添加的','的','测试数据')--测试添加测试数据STUFF() ......
  • windowds下备份MySQL(mysqldump)
     mytest.bat文件内容如下 @echooffsetbackup_date=%date:~0,4%%date:~5,2%%date:~8,2%setdb_name=db_test01db_test02db_test03for%%iin(%db_name%)do(mysqldump-hlocalhost-uroot-pmysql-P13306%%i--default-character-set=utf8--set-gtid-purged=OFF......
  • mysql_clone
    HowtoInstall安装UsingtheINSTALLPLUGINstatement:Unix/Linux:mysql>INSTALLPLUGINcloneSONAME'mysql_clone.so';Windows:mysql>INSTALLPLUGINcloneSONAME'mysql_clone.dll';Usingtheplugin-loadoptionintheMySQLco......
  • MySQL 元数据
    MySQL元数据你可能想知道MySQL以下三种信息:查询结果信息: SELECT,UPDATE或DELETE语句影响的记录数。数据库和数据表的信息: 包含了数据库及数据表的结构信息。MySQL服务器信息: 包含了数据库服务器的当前状态,版本号等。在MySQL的命令提示符中,我们可以很容易的获取以上......
  • MySQL数据库基础
    MYSQL数据库基础Mysql的基础操作mysql概述启动和停止:在运行窗口中输入"services.msc"进入本地服务窗口,找到MySQL80右键关闭或启动.在命令行中输入(以管理员身份运行)netstartmysql80 启动netstopmysql80停止客户端的连接MySQL提供的客户端命令......