2,498
社区成员
发帖
与我相关
我的任务
分享
SELECT PROJ_NUMB, PROJ_NAME, CJOB_TOTAL, RJOB_TOTAL AS TOTAL,
(CJOB_TOTAL-EJOB_TOTAL-RJOB_TOTAL) AS LIRUN
FROM (SELECT P.PROJ_NUMB, P.PROJ_NAME,
SUM(C.CJOB_TOTAL) AS CJOB_TOTAL,
SUM(E.EJOB_TOTAL) AS EJOB_TOTAL,
SUM(R.RJOB_TOTAL) AS RJOB_TOTAL
FROM PROJECTS AS P
LEFT JOIN CJOBS AS C ON C.PROJ_ID=P.PROJ_ID
LEFT JOIN EJOBS AS E ON E.PROJ_ID=P.PROJ_ID
LEFT JOIN RJOBS AS R ON R.PROJ_ID=P.PROJ_ID
GROUP BY P.PROJ_NUMB, P.PROJ_NAME) AS T1;
这个才对:
WITH
R AS (SELECT PROJ_ID, SUM(RJOB_TOTAL) AS RJOB_TOTAL FROM RJOBS GROUP BY PROJ_ID),
E AS (SELECT PROJ_ID, SUM(EJOB_TOTAL) AS EJOB_TOTAL FROM EJOBS GROUP BY PROJ_ID),
C AS (SELECT PROJ_ID, SUM(CJOB_TOTAL) AS CJOB_TOTAL FROM CJOBS GROUP BY PROJ_ID)
SELEC PROJ_NUMB, PROJ_NAME,
ISNULL(CJOB_TOTAL, 0.0) AS CJOB_TOTAL,
ISNULL(RJOB_TOTAL, 0.0) AS RJOB_TOTAL,
(ISNULL(CJOB_TOTAL, 0.0)-ISNULL(EJOB_TOTAL, 0.0)-ISNULL(RJOB_TOTAL, 0.0)) AS LIRUN
FROM PROJECTS AS P
LEFT JOIN R ON R.PROJ_ID=P.PROJ_ID
LEFT JOIN E ON E.PROJ_ID=P.PROJ_ID
LEFT JOIN C ON C.PROJ_ID=P.PROJ_ID
ORDER BY PROJ_NUMB
更正一下
WITH
R AS (SELECT PROJ_ID, SUM(RJOB_TOTAL) AS RJOB_TOTAL FROM RJOBS GROUP BY PROJ_ID),
E AS (SELECT PROJ_ID, SUM(EJOB_TOTAL) AS EJOB_TOTAL FROM EJOBS GROUP BY PROJ_ID),
C AS (SELECT PROJ_ID, SUM(CJOB_TOTAL) AS CJOB_TOTAL FROM CJOBS GROUP BY PROJ_ID)
SELEC PROJ_NUMB, PROJ_NAME,
ISNULL(CJOB_TOTAL, 0.0) AS CJOB_TOTAL,
ISNULL(RJOB_TOTAL, 0.0) AS RJOB_TOTAL,
(ISNULL(CJOB_TOTAL, 0.0)-ISNULL(EJOB_TOTAL, 0.0)-ISNULL(RJOB_TOTAL, 0.0)) AS LIRUN
FROM PROJECTS AS P
LEFT JOIN R ON R.PROJ_ID=P.PROJ_ID
LEFT JOIN E ON R.PROJ_ID=P.PROJ_ID
LEFT JOIN C ON R.PROJ_ID=P.PROJ_ID
ORDER BY PROJ_NUMB
这样写会好看一点(group by语句没有必要了吧?):
WITH
R AS (SELECT PROJ_ID, SUM(RJOB_TOTAL) AS RJOB_TOTAL FROM RJOBS GROUP BY PROJ_ID),
E AS (SELECT PROJ_ID, SUM(EJOB_TOTAL) AS EJOB_TOTAL FROM EJOBS GROUP BY PROJ_ID),
C AS (SELECT PROJ_ID, SUM(CJOB_TOTAL) AS CJOB_TOTAL FROM CJOBS GROUP BY PROJ_ID)
SELEC TPROJ_NUMB, PROJ_NAME,
ISNULL(CJOB_TOTAL, 0.0) AS CJOB_TOTAL,
ISNULL(RJOB_TOTAL, 0.0) AS RJOB_TOTAL,
(ISNULL(CJOB_TOTAL, 0.0)-ISNULL(EJOB_TOTAL, 0.0)-ISNULL(RJOB_TOTAL, 0.0)) AS LIRUN
FROM PROJECTS AS P
LEFT JOIN R ON R.PROJ_ID=P.PROJ_ID
LEFT JOIN E ON E.PROJ_ID=P.PROJ_ID
LEFT JOIN C ON C.PROJ_ID=P.PROJ_ID
ORDER BY TPROJ_NUMB
LEFT OUTER JOIN
(
SELECT RJOBS.PROJ_ID,SUM(RJOBS.RJOB_TOTAL)AS RJOB_TOTAL
FROM RJOBS
GROUP BY RJOBS.PROJ_ID
)AS T2
ON T1.PROJ_ID=T2.PROJ_ID
你上面的语句,应该就等效于下面的语句(group by语句根据你的写法来写):
SELECT PROJ_NUMB, PROJ_NAME,
ISNULL(CJOB_TOTAL, 0.0) AS CJOB_TOTAL,
ISNULL(RJOB_TOTAL, 0.0) AS RJOB_TOTAL,
(ISNULL(CJOB_TOTAL, 0.0)-ISNULL(EJOB_TOTAL, 0.0)-ISNULL(RJOB_TOTAL, 0.0)) AS LIRUN
FROM (SELECT P.PROJ_NUMB, P.PROJ_NAME,
SUM(C.CJOB_TOTAL) AS CJOB_TOTAL,
SUM(E.EJOB_TOTAL) AS EJOB_TOTAL,
SUM(R.RJOB_TOTAL) AS RJOB_TOTAL
FROM PROJECTS AS P
LEFT JOIN CJOBS AS C ON C.PROJ_ID=P.PROJ_ID
LEFT JOIN EJOBS AS E ON E.PROJ_ID=P.PROJ_ID
LEFT JOIN RJOBS AS R ON R.PROJ_ID=P.PROJ_ID
GROUP BY PROJ_NUMB, PROJ_NAME, CJOB_TOTAL, RJOB_TOTAL, EJOB_TOTAL) AS T1;
SELECT PROJ_NUMB, PROJ_NAME,
ISNULL(CJOB_TOTAL, 0.0) AS CJOB_TOTAL,
ISNULL(RJOB_TOTAL, 0.0) AS RJOB_TOTAL,
(ISNULL(CJOB_TOTAL, 0.0)-ISNULL(EJOB_TOTAL, 0.0)-ISNULL(RJOB_TOTAL, 0.0)) AS LIRUN
SELECT
PROJ_NUMB, PROJ_NAME,CJOB_TOTAL,RJOB_TOTAL,EJOB_TOTAL
改为下面的语句就可以把空值转为0:
SELECT PROJ_NUMB, PROJ_NAME,
ISNULL(CJOB_TOTAL, 0.0) AS CJOB_TOTAL,
ISNULL(RJOB_TOTAL, 0.0) AS RJOB_TOTAL,
(ISNULL(CJOB_TOTAL, 0.0)-ISNULL(EJOB_TOTAL, 0.0)-ISNULL(RJOB_TOTAL, 0.0)) AS LIRUN
SELECT
PROJ_NUMB, PROJ_NAME,CJOB_TOTAL,RJOB_TOTAL,EJOB_TOTAL
FROM PROJECTS AS T1
LEFT OUTER JOIN
(
SELECT RJOBS.PROJ_ID,SUM(RJOBS.RJOB_TOTAL)AS RJOB_TOTAL
FROM RJOBS
GROUP BY RJOBS.PROJ_ID
)AS T2
ON T1.PROJ_ID=T2.PROJ_ID
LEFT OUTER JOIN
(
SELECT EJOBS.PROJ_ID,SUM(EJOBS.EJOB_TOTAL)AS EJOB_TOTAL
FROM EJOBS
GROUP BY EJOBS.PROJ_ID
)AS T3
ON T1.PROJ_ID=T3.PROJ_ID
LEFT OUTER JOIN
(
SELECT CJOBS.PROJ_ID,SUM(CJOBS.CJOB_TOTAL)AS CJOB_TOTAL
FROM CJOBS
GROUP BY CJOBS.PROJ_ID
)AS T4
ON T1.PROJ_ID=T4.PROJ_ID
GROUP BY PROJ_NUMB, PROJ_NAME,CJOB_TOTAL,RJOB_TOTAL,EJOB_TOTAL
SELECT PROJ_NUMB, PROJ_NAME, CJOB_TOTAL, RJOB_TOTAL,
(CJOB_TOTAL-EJOB_TOTAL-RJOB_TOTALL) AS LIRUN
FROM (SELECT P.PROJ_NUMB, P.PROJ_NAME,
SUM(C.CJOB_TOTAL) AS CJOB_TOTAL,
SUM(E.EJOB_TOTAL) AS EJOB_TOTAL,
SUM(R.RJOB_TOTAL) AS RJOB_TOTAL
FROM PROJECTS AS P
LEFT JOIN CJOBS AS C ON C.PROJ_ID=P.PROJ_ID
LEFT JOIN EJOBS AS E ON E.PROJ_ID=P.PROJ_ID
LEFT JOIN RJOBS AS R ON R.PROJ_ID=P.PROJ_ID
GROUP BY P.PROJ_NUMB, P.PROJ_NAME) AS T1;