是一个三张表查询sql语句。。三张表分别为项目信息表proInfo,计划进度表schedule和实际进度表actuaprogress表,表结构分别如下:proInfo表:
proId——(guid)项目id(主键)
proName——(nvarchar50)项目名称
proNo——(nvarchar50)项目编号schedule表:
schId——(guid)进度编号
proId——(guid)项目id(外键)
schProportion——(int)预计完成所占项目比例
Quarter——季度(int)actuaprogress表:
actId——(guid)实际进度编号(主键)
proId——(guid)项目id(外键)
actProportion——(int)实际完成所占项目比例
Quarter——季度测试数据:
proInfo表:
sdfasdf……       XXX测试项目        CS-2012-12-01测试项目schedule表:
XXXX……          sdfasdf……        25          1
eees……          sdfasdf……        30          2actuaprogress表:
wwww……         sdfasdf……         20          3
rrsr……         sdfasdf……         39          4查询要求:查出每个项目4个季度预计完成比例和实际完成比例????说明:schedule表和actuaprogress表中的数据并不是每个项目对应都有4条——四个季度,有可能预计从第3季度才开始,实际也可能不是4条——实际第三季度没有开工,第四季度才开始。。表结构是这样设计的,不知道该如何查询才好。

解决方案 »

  1.   

     --測試數據  
     IF OBJECT_ID('proinfo') IS NOT NULL
     DROP TABLE proinfo
     GO
     CREATE TABLE proinfo(prold INT,proName NVARCHAR(50),proNo NVARCHAR(50))
     GO
     INSERT INTO proinfo
     SELECT '12345','XXX测试项目','CS-2012-12-01测试项目'
     --  SELECT * FROM proinfo
     
     IF OBJECT_ID('schedule')IS NOT NULL
     DROP TABLE schedule
     GO
     CREATE TABLE schedule(schld INT,prold INT,schProportion INT,Quarter INT)   
     GO
     --測試數據   
    INSERT INTO schedule
    SELECT '1111','12345','25','1' UNION ALL
    SELECT '2222','12345','30','2' --    SELECT * FROM schedule
     IF OBJECT_ID('actuaprogress')IS NOT NULL
     DROP TABLE actuaprogress
     GO
     CREATE TABLE actuaprogress(actld INT,prold INT,actProportion INT,Quarter INT)   
     GO
     --測試數據   
    INSERT INTO actuaprogress
    SELECT '3333','12345','20','3' UNION ALL
    SELECT '4444','12345','39','4'  
    -- SELECT * FROM actuaprogressSELECT  a.proName AS 项目名称,
            MAX(CASE WHEN b.Quarter=1 THEN b.schProportion ELSE  '0' END) AS 一季度预计项比,
            MAX(CASE WHEN b.Quarter=2 THEN b.schProportion ELSE  '0' END) AS 二季度预计项比,
            MAX(CASE WHEN b.Quarter=3 THEN b.schProportion ELSE  '0' END) AS 三季度预计项比,
            MAX(CASE WHEN b.Quarter=4 THEN b.schProportion ELSE  '0' END) AS 四季度预计项比,
            MAX(CASE WHEN c.Quarter=1 THEN c.actProportion ELSE  '0' END) AS 一季度实际项比,
            MAX(CASE WHEN c.Quarter=2 THEN c.actProportion ELSE  '0' END) AS 二季度实际项比,
            MAX(CASE WHEN c.Quarter=3 THEN c.actProportion ELSE  '0' END) AS 三季度实际项比,
            MAX(CASE WHEN c.Quarter=4 THEN c.actProportion ELSE  '0' END) AS 四季度实际项比            
    FROM proinfo a,schedule b,actuaprogress cWHERE  a.prold=b.prold AND
           b.prold=c.prold 
    GROUP  BY a.proName
    /*
    ------------------------------------------------------------------------------------
    项目名称 一季度预计项比 二季度预计项比 三季度预计项比 四季度预计项比 一季度实际项比 二季度实际项比 三季度实际项比 四季度实际项比
    XXX测试项目 25 30 0 0 0 0 20 39
    */