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

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

--库区表
  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

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

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值