您的位置:首页 > 其它

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

2010-03-01 20:15 225 查看
方法一:

 

--查询宿舍楼中的空宿舍 

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