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