用临时表实现多表数据的统计

方法一:

 

--查询宿舍楼中的空宿舍 
IF(@FunctionName='EmptyDormtory')
BEGIN
--SELECT  StW_宿舍.ID,
--        StW_宿舍.宿舍楼ID--,
----        StW_宿舍.入住人数
--INTO #Temp1
--FROM StW_宿舍
--WHERE(StW_宿舍.入住人数=0)


SELECT  StW_宿舍楼.ID AS 宿舍楼ID,
        StW_宿舍楼.名称 AS 宿舍楼名称,
        StW_宿舍楼.宿舍总数,
        StW_宿舍.ID AS 宿舍ID,
        StW_宿舍.入住人数
INTO #Temp
FROM StW_宿舍楼
INNER JOIN StW_宿舍
ON(StW_宿舍.宿舍楼ID=StW_宿舍楼.ID AND StW_宿舍.入住人数=0)
--WHERE(StW_宿舍楼.ID IN(SELECT * FROM dbo.[StW_SplitStr](@mID1,@mID2,@mID3,@mID4,@mID5,@mID6,@mID7,@mID8,@mID9,@mID10,':')))
--GROUP BY StW_宿舍楼.ID,StW_宿舍楼.名称, StW_宿舍楼.宿舍总数,StW_宿舍.ID,StW_宿舍.入住人数

SELECT 宿舍楼名称,
       宿舍总数,
       COUNT(宿舍楼ID) AS 空宿舍总数,
       (宿舍总数-COUNT(宿舍楼ID)) AS 入住宿舍总数
FROM #Temp

GROUP BY 宿舍楼名称,宿舍总数--,COUNT(宿舍楼ID)
--WHERE(StW_宿舍楼.ID IN(SELECT * FROM dbo.[StW_SplitStr](@mID1,@mID2,@mID3,@mID4,@mID5,@mID6,@mID7,@mID8,@mID9,@mID10,':')))
DROP TABLE #Temp

END

 

 

方法二:

 

--查询宿舍楼中的空宿舍 
IF(@FunctionName='EmptyDormtory')
BEGIN

--WHERE(StW_宿舍楼.ID IN(SELECT * FROM dbo.[StW_SplitStr](@mID1,@mID2,@mID3,@mID4,@mID5,@mID6,@mID7,@mID8,@mID9,@mID10,':')))
--GROUP BY StW_宿舍楼.ID,StW_宿舍楼.名称, StW_宿舍楼.宿舍总数,StW_宿舍.ID,StW_宿舍.入住人数

 

select distinct 宿舍楼ID,
  count(*) as 空宿舍
into #Temp空宿舍
from StW_宿舍
where StW_宿舍.入住人数=0-- and 宿舍楼ID is not null and 宿舍楼ID <>''
group by 宿舍楼ID

 

 


select distinct 宿舍楼ID,
  count(*) as 宿舍
into #Temp宿舍
from StW_宿舍
--where StW_宿舍.入住人数-- and 宿舍楼ID is not null and 宿舍楼ID <>''
group by 宿舍楼ID

 


SELECT  StW_宿舍楼.ID AS 宿舍楼ID,
        StW_宿舍楼.名称 AS 宿舍楼名称,
  #Temp宿舍.宿舍 as 宿舍总数,
  #Temp空宿舍.空宿舍,
  #Temp宿舍.宿舍 - #Temp空宿舍.空宿舍 as 已住宿舍
from StW_宿舍楼
inner join #Temp宿舍
on StW_宿舍楼.ID = #Temp宿舍.宿舍楼ID
inner join #Temp空宿舍
on StW_宿舍楼.ID = #Temp空宿舍.宿舍楼ID
DROP TABLE #Temp宿舍
DROP TABLE #Temp空宿舍

 

 


END
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值