是一个三张表查询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条——实际第三季度没有开工,第四季度才开始。。表结构是这样设计的,不知道该如何查询才好。
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条——实际第三季度没有开工,第四季度才开始。。表结构是这样设计的,不知道该如何查询才好。
解决方案 »
- 求一SQL语句(返回记录集由横向变为纵向)
- 问个问题啊~~~~~~
- 如何查询出所有记录?
- 引用找不到ExecutePackageTask
- 我的sql server 2005附加数据库时提示"附加数据库时出错。有关详细信息,请单击“消息”列中的超链接"
- 动态sql转非动态
- SQL语句是对的, 也能正常执行, 但有的时候却不能正常更新
- innerjoin 不就是等号嘛?有何区别?
- ***access sql查询的棘手问题(以多个同类型字段的最大值作为查询条件!)
- 我来了,一个非常难的sql语句问题!请高手们相助阿。。。。。。。。。。。。。有分贡上!!!!!
- 新手。sql排行问题求帮助
- 自动编号如何修改
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
*/