当前位置: 代码迷 >> Sql Server >> ,怎么把两个只有学校相同的表连接到一起并统计成视图2
  详细解决方案

,怎么把两个只有学校相同的表连接到一起并统计成视图2

热度:15   发布时间:2016-04-24 18:21:40.0
求助,如何把两个只有学校相同的表连接到一起并统计成视图2?
SQL 表统计成视图 
我有两张表
1.论文表
学校       论文     论文类型
学校a    论文a1    类型aa
学校b    论文b1    类型bb

2.课题表
学校       课题      课题类型
学校c     课题c1   类型aaa
学校a     课题cc   类型bbb

3.视图 要把他统计成视图如下
学校   论文总数   论文类型aa总数  论文类型bb总数   课题总数  课题类型aaa总数  课题类型bbb总数
学校a     1          1              0             1           0              1
学校b     1          0              1             0           0              0
学校c     0          0              0             1           1              0
怎么使两张表的统计结果以视图显示? 
------解决方案--------------------
动态的没搞出来
----------------------------------------------------------------
-- Author  :DBA_Huangzj(發糞塗牆)
-- Date    :2014-01-20 11:33:22
-- Version:
--      Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64) 
-- Dec 28 2012 20:23:12 
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )
--
----------------------------------------------------------------
--> 测试数据:[论文表]
if object_id('[论文表]') is not null drop table [论文表]
go 
create table [论文表]([学校] varchar(5),[论文] varchar(6),[论文类型] varchar(6))
insert [论文表]
select '学校a','论文a1','类型aa' union all
select '学校b','论文b1','类型bb'
--> 测试数据:[课题表]
if object_id('[课题表]') is not null drop table [课题表]
go 
create table [课题表]([学校] varchar(5),[课题] varchar(6),[课题类型] varchar(7))
insert [课题表]
select '学校c','课题c1','类型aaa' union all
select '学校a','课题cc','类型bbb'
--------------开始查询--------------------------
IF OBJECT_ID('tempdb..#t','U')IS NOT NULL 
DROP TABLE #t


/*
学校   论文总数   论文类型aa总数  论文类型bb总数   课题总数  课题类型aaa总数  课题类型bbb总数
学校a     1          1              0             1           0              1
学校b     1          0              1             0           0              0
学校c     0          0              0             1           1              0
*/


SELECT [学校],MAX([论文])[论文],MAX([论文类型])[论文类型],MAX([课题])[课题],MAX([课题类型])[课题类型] INTO #t
FROM (
SELECT [学校],[论文],[论文类型] ,NULL [课题] ,NULL [课题类型]
FROM [论文表]
UNION ALL 
SELECT [学校],NULL [论文], NULL [论文类型] , [课题] , [课题类型]
FROM [课题表])a
GROUP BY [学校]


SELECT [学校],COUNT([论文])[论文],论文类型aa总数=COUNT(case WHEN [论文类型]='类型aa' THEN 1 ELSE NULL end  ),
论文类型bb总数=COUNT(case WHEN [论文类型]='类型bb' THEN 1 ELSE NULL end  ),
课题总数=COUNT([课题]),课题类型aaa总数=COUNT(case WHEN [课题类型]='类型aaa' THEN 1 ELSE NULL end  ),
课题类型bbb总数=COUNT(case WHEN [课题类型]='类型bbb' THEN 1 ELSE NULL end  )
 FROM #t
 GROUP BY [学校]

----------------结果----------------------------
/* 
学校    论文          论文类型aa总数    论文类型bb总数    课题总数        课题类型aaa总数   课题类型bbb总数
  相关解决方案