动态的没搞出来----------------------------------------------------------------
-- 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总数
----- ----------- ----------- ----------- ----------- ----------- -----------
学校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总数
----- ----------- ----------- ----------- ----------- ----------- -----------
学校a 1 1 0 1 0 1
学校b 1 0 1 0 0 0
学校c 0 0 0 1 1 0
*/
select '学校a', '论文a1', '类型aa' union all
select '学校b', '论文b1', '类型bb'create table 课题表(学校 varchar(10), 课题 varchar(10),课题类型 varchar(10))insert into 课题表
select '学校c', '课题c1', '类型aaa' union all
select '学校a ', '课题cc', '类型bbb'
go
select a.学校,
isnull(b.c,0) 论文总数,
isnull(b.aa,0) 论文类型aa总数,
isnull(b.bb,0) 论文类型bb总数,
isnull(c.c,0) 课题总数 ,
isnull(c.aaa,0) 课题类型aaa总数,
isnull(c.bbb,0) 课题类型bbb总数
from
(
select 学校
from 论文表
union
select 学校
from 课题表
)a
left join
(
select 学校,count(*) c,
SUM(case when 论文类型='类型aa' then 1 else 0 end) aa,
SUM(case when 论文类型='类型bb' then 1 else 0 end) bb
from 论文表
group by 学校
)b
on b.学校 = a.学校
left join
(
select 学校,count(*) c,
SUM(case when 课题类型='类型aaa' then 1 else 0 end) aaa,
SUM(case when 课题类型='类型bbb' then 1 else 0 end) bbb
from 课题表
group by 学校
) c
on c.学校 = a.学校
/*
学校 论文总数 论文类型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 [学校]
ORDER 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 [学校]declare @s nvarchar(max)
set @s=''
Select @s=@s+','+CASE WHEN [论文类型] IS NOT NULL THEN quotename('论文'+[论文类型]+'总数')+'=count(case when [论文类型]='+quotename([论文类型],'''')+' and 学校='+quotename(学校,'''')+' then 1 else null end)' ELSE ',' END
+','+CASE WHEN [课题类型] IS NOT NULL THEN quotename('课题'+[课题类型]+'总数')+'=count(case when [课题类型]='+quotename([课题类型],'''')+' and 学校='+quotename(学校,'''')+' then 1 else null end)' ELSE ',' END
from #t group by [论文类型],学校,[课题类型]
SET @s=REPLACE (@s,',,,',',')
SET @s=REPLACE (@s,','+',',',')
SELECT @s=SUBSTRING(@s,1,LEN(@s)-1)
EXEC
('select [学校],count([论文])[论文总数],COUNT([课题]) 课题总数'+@s+' from #t group by [学校]')----------------结果----------------------------
/*
学校 论文总数 课题总数 课题类型aaa总数 论文类型aa总数 课题类型bbb总数 论文类型bb总数
----- ----------- ----------- ----------- ----------- ----------- -----------
学校a 1 1 0 1 1 0
学校b 1 0 0 0 0 1
学校c 0 1 1 0 0 0
*/
SUM(CASE WHEN ISNULL(论文,'') = '' THEN 0 ELSE 1 END) 论文总数,
SUM(CASE WHEN ISNULL(论文类型,'') = '类型aa' THEN 1 ELSE 0 END) 论文类型aa总数,
SUM(CASE WHEN ISNULL(论文类型,'') = '类型bb' THEN 1 ELSE 0 END) 论文类型bb总数,
SUM(CASE WHEN ISNULL(课题,'') = '' THEN 0 ELSE 1 END) 课题总数,
SUM(CASE WHEN ISNULL(课题类型,'') = '类型aaa' THEN 1 ELSE 0 END) 课题类型aaa总数,
SUM(CASE WHEN ISNULL(课题类型,'') = '类型bbb' THEN 1 ELSE 0 END) 课题类型bbb总数
FROM (SELECT 学校 FROM 论文表
UNION SELECT 学校 FROM 课题表) a
LEFT JOIN 论文表 b ON a.学校 = b.学校
LEFT JOIN 课题表 c ON a.学校 = c.学校
GROUP BY a.学校
我现在用这些
use BYSJ
select tp.SchoolID 学校,count(tp.ctp) 论文 ,max(case tp.PaperClassID when '1' then tp.ctp else 0 end)CSCD,max(case tp.PaperClassID when '2' then tp.ctp else 0 end)CSSCI,max(case tp.PaperClassID when '3' then tp.ctp else 0 end)as'CSI/EI',tp.BelongYear
from (SELECT SchoolID,COUNT(PaperName) ctp,PaperClassID,BelongYear FROM dbo.Paper_info GROUP BY SchoolID,PaperClassID,BelongYear)tp
group by SchoolID,BelongYear,tp.ctp
go
语句来查询统计,结果是要怎样才能把它们结合到一起?
SUM(CASE WHEN ISNULL(PaperClassID,'') = '' THEN 0 ELSE 1 END) 论文总数,
SUM(CASE WHEN ISNULL(PaperClassID,'') = '1' THEN 1 ELSE 0 END) CSCD总数,
SUM(CASE WHEN ISNULL(PaperClassID,'') = '2' THEN 1 ELSE 0 END) CSSCI总数,
SUM(CASE WHEN ISNULL(PaperClassID,'') = '3' THEN 1 ELSE 0 END)as'CSI/EI总数',
SUM(CASE WHEN ISNULL(SubjectClassID,'') = '' THEN 0 ELSE 1 END) 课题总数,
SUM(CASE WHEN ISNULL(SubjectClassID,'') = '1' THEN 1 ELSE 0 END) 国家级社科总数,
SUM(CASE WHEN ISNULL(SubjectClassID,'') = '2' THEN 1 ELSE 0 END) 国家级自科总数,
SUM(CASE WHEN ISNULL(SubjectClassID,'') = '3' THEN 1 ELSE 0 END) 教育部课题,
SUM(CASE WHEN ISNULL(SubjectClassID,'') = '4' THEN 1 ELSE 0 END) 科技部课题,
FROM (SELECT SchoolID FROM dbo.Paper_info
UNION SELECT SchoolID FROM dbo.Subject_info)a
LEFT JOIN dbo.Paper_info b ON a.SchoolID = b.SchoolID
LEFT JOIN dbo.Subject_info c ON a.SchoolID = c.SchoolID
GROUP BY a.SchoolID
显示消息 156,级别 15,状态 1,第 11 行
关键字 'FROM' 附近有语法错误。
消息 102,级别 15,状态 1,第 12 行
'a' 附近有语法错误。
from (SELECT SchoolID,COUNT(PaperName) ctp,PaperClassID,BelongYear FROM dbo.Paper_info GROUP BY SchoolID,PaperClassID,BelongYear)tp
left join(select ts.SchoolID 学校 ,count(ts.cts)课题,max(case ts.SubjectClassID when '1' then ts.cts else 0 end)国家级社科项目,max(case ts.SubjectClassID when '2' then ts.cts else 0 end)国家级自科项目,max(case ts.SubjectClassID when '3' then ts.cts else 0 end)教育部课题,max(case ts.SubjectClassID when '4' then ts.cts else 0 end)科技部课题,ts.BelongYear
from (SELECT SchoolID,COUNT(SubjectName)cts,SubjectClassID,BelongYear FROM dbo.Subject_info GROUP BY SchoolID,SubjectClassID,BelongYear)ts
group by SchoolID,BelongYear,ts.cts) on tp.SchoolID =ts.SchoolID and tp.BelongYear=ts.BelongYear
left join (select tpa.SchoolID 学校 ,count(tpa.ctpa)发明,max(case tpa.PatentClassID when '1' then tpa.ctpa else 0 end)实用型设计,max(case tpa.PatentClassID when '2' then tpa.ctpa else 0 end)外观设计,max(case tpa.PatentClassID when '3' then tpa.ctpa else 0 end)发明专利,tpa.BelongYear
from (SELECT SchoolID,COUNT(PatentName)ctpa,PatentClassID,BelongYear FROM dbo.Patent_info GROUP BY SchoolID,PatentClassID,BelongYear)tpa
group by SchoolID,BelongYear,tpa.ctpa)on(tpa.SchoolID =tp.SchoolID and tpa.BelongYear=tp.BelongYear)
left join(select tw.SchoolID 学校 ,count(tw.ctw)论文, max(case tw.WinClassID when '1' then tw.ctw else 0 end)国家级,max(case tw.WinClassID when '2' then tw.ctw else 0 end)省部级,max(case tw.WinClassID when '3' then tw.ctw else 0 end)as'市(司、厅、局)级',tw.BelongYear
from (SELECT SchoolID,COUNT(WinName)ctw,WinClassID,BelongYear FROM dbo.Win_info GROUP BY SchoolID,WinClassID,BelongYear)tw
group by SchoolID,BelongYear,tw.ctw)on(tw.SchoolID =tp.SchoolID and tw.BelongYear=tp.BelongYear)
group by SchoolID,BelongYear,tp.ctp
我是用这个代码左连接,可是一直出现这个错误消息 156,级别 15,状态 1,第 8 行
关键字 'on' 附近有语法错误。
消息 156,级别 15,状态 1,第 11 行
关键字 'on' 附近有语法错误。
消息 156,级别 15,状态 1,第 14 行
关键字 'on' 附近有语法错误。麻烦了
COUNT(tp.ctp) 论文 ,
MAX(CASE tp.PaperClassID
WHEN '1' THEN tp.ctp
ELSE 0
END) CSCD ,
MAX(CASE tp.PaperClassID
WHEN '2' THEN tp.ctp
ELSE 0
END) CSSCI ,
MAX(CASE tp.PaperClassID
WHEN '3' THEN tp.ctp
ELSE 0
END) AS 'CSI/EI' ,
tp.BelongYear
FROM ( SELECT SchoolID ,
COUNT(PaperName) ctp ,
PaperClassID ,
BelongYear
FROM dbo.Paper_info
GROUP BY SchoolID ,
PaperClassID ,
BelongYear
) tp
LEFT JOIN ( SELECT ts.SchoolID 学校 ,
COUNT(ts.cts) 课题 ,
MAX(CASE ts.SubjectClassID
WHEN '1' THEN ts.cts
ELSE 0
END) 国家级社科项目 ,
MAX(CASE ts.SubjectClassID
WHEN '2' THEN ts.cts
ELSE 0
END) 国家级自科项目 ,
MAX(CASE ts.SubjectClassID
WHEN '3' THEN ts.cts
ELSE 0
END) 教育部课题 ,
MAX(CASE ts.SubjectClassID
WHEN '4' THEN ts.cts
ELSE 0
END) 科技部课题 ,
ts.BelongYear
FROM ( SELECT SchoolID ,
COUNT(SubjectName) cts ,
SubjectClassID ,
BelongYear
FROM dbo.Subject_info
GROUP BY SchoolID ,
SubjectClassID ,
BelongYear
) ts
GROUP BY SchoolID ,
BelongYear ,
ts.cts
)ts ON tp.SchoolID = ts.SchoolID
AND tp.BelongYear = ts.BelongYear
LEFT JOIN ( SELECT tpa.SchoolID 学校 ,
COUNT(tpa.ctpa) 发明 ,
MAX(CASE tpa.PatentClassID
WHEN '1' THEN tpa.ctpa
ELSE 0
END) 实用型设计 ,
MAX(CASE tpa.PatentClassID
WHEN '2' THEN tpa.ctpa
ELSE 0
END) 外观设计 ,
MAX(CASE tpa.PatentClassID
WHEN '3' THEN tpa.ctpa
ELSE 0
END) 发明专利 ,
tpa.BelongYear
FROM ( SELECT SchoolID ,
COUNT(PatentName) ctpa ,
PatentClassID ,
BelongYear
FROM dbo.Patent_info
GROUP BY SchoolID ,
PatentClassID ,
BelongYear
) tpa
GROUP BY SchoolID ,
BelongYear ,
tpa.ctpa
) tpa ON ( tpa.SchoolID = tp.SchoolID
AND tpa.BelongYear = tp.BelongYear
)
LEFT JOIN ( SELECT tw.SchoolID 学校 ,
COUNT(tw.ctw) 论文 ,
MAX(CASE tw.WinClassID
WHEN '1' THEN tw.ctw
ELSE 0
END) 国家级 ,
MAX(CASE tw.WinClassID
WHEN '2' THEN tw.ctw
ELSE 0
END) 省部级 ,
MAX(CASE tw.WinClassID
WHEN '3' THEN tw.ctw
ELSE 0
END) AS '市(司、厅、局)级' ,
tw.BelongYear
FROM ( SELECT SchoolID ,
COUNT(WinName) ctw ,
WinClassID ,
BelongYear
FROM dbo.Win_info
GROUP BY SchoolID ,
WinClassID ,
BelongYear
) tw
GROUP BY SchoolID ,
BelongYear ,
tw.ctw
) tw ON ( tw.SchoolID = tp.SchoolID
AND tw.BelongYear = tp.BelongYear
)
GROUP BY SchoolID ,
BelongYear ,
tp.ctp
http://bbs.csdn.net/topics/390739231
重新开贴了