动态的没搞出来----------------------------------------------------------------
-- 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
*/

解决方案 »

  1.   

    create table 论文表(学校 varchar(10), 论文  varchar(10),论文类型 varchar(10))insert into 论文表
    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
    */
      

  2.   

    动态的----------------------------------------------------------------
    -- 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
    */
      

  3.   

    列死的可以写成视图,简单,但是如果列是根据内容动态的话,视图就用不了了,存储过程可以SELECT a.学校,
    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.学校
      

  4.   

    还是不会
    我现在用这些
    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
    语句来查询统计,结果是要怎样才能把它们结合到一起?
      

  5.   

    SELECT a.SchoolID,
    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' 附近有语法错误。
      

  6.   

    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
    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' 附近有语法错误。麻烦了
      

  7.   

    你的on前面要加别名的,帮你改到不报错,不过不知道结果如何,回复请引用啊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
            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
      

  8.   

    我已经在
    http://bbs.csdn.net/topics/390739231
    重新开贴了