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

方法一:

 

--查询宿舍楼中的空宿舍 
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
 

你可能感兴趣的:(JOIN,table,null)