strSql=@"select ProjectId,TotalDin,TodayFinishSize,FinishSize,CONVERT(NVARCHAR(10),(CAST((CASE ISNULL(TotalDin,0) WHEN 0 THEN 0
// 优化:使用 CTE 和 LEFT JOIN 替代嵌套子查询
ELSE 100.0 * ISNULL(FinishSize,0)/(1.0 * TotalDin) END) AS DECIMAL(8,2))))+'%'
strSql=@"
AS Rate from
WITH AllWeldJoints AS (
(select b.ProjectId,CAST((SELECT ISNULL(SUM(ISNULL(Size,0)),0) FROM dbo.HJGL_WeldJoint WHERE ProjectId=b.ProjectId) AS DECIMAL(12,3)) AS TotalDin,
-- 所有焊口总量
CAST((SELECT ISNULL(SUM(ISNULL(jot.Size,0)),0) FROM dbo.HJGL_WeldJoint jot left join dbo.HJGL_WeldingDaily d on d.WeldingDailyId=jot.WeldingDailyId WHERE jot.ProjectId=b.ProjectId AND jot.WeldingDailyId IS NOT NULL and d.WeldingDate=@WeldingDate) AS DECIMAL(12,3)) AS TodayFinishSize,
SELECT ProjectId, SUM(ISNULL(Size, 0)) AS TotalDin
CAST((SELECT ISNULL(SUM(ISNULL(jot.Size,0)),0) FROM dbo.HJGL_WeldJoint jot left join dbo.HJGL_WeldingDaily d on d.WeldingDailyId=jot.WeldingDailyId WHERE jot.ProjectId=b.ProjectId AND jot.WeldingDailyId IS NOT NULL and d.WeldingDate<=@WeldingDate) AS DECIMAL(12,3)) AS FinishSize
FROM dbo.HJGL_WeldJoint
from Base_Project b) v where ProjectId=@ProjectId ";
WHERE ProjectId = @ProjectId
GROUP BY ProjectId
),
TodayWelding AS (
-- 当日焊接记录(返回 WeldingDailyId)
SELECT wd.WeldingDailyId
FROM dbo.HJGL_WeldingDaily wd
WHERE wd.ProjectId = @ProjectId AND wd.WeldingDate = @WeldingDate
),
TodayWeldJoints AS (
-- 当日完成焊口
SELECT jot.ProjectId, SUM(ISNULL(jot.Size, 0)) AS TodayFinishSize
FROM dbo.HJGL_WeldJoint jot
INNER JOIN TodayWelding tw ON jot.WeldingDailyId = tw.WeldingDailyId
WHERE jot.ProjectId = @ProjectId AND jot.WeldingDailyId IS NOT NULL
GROUP BY jot.ProjectId
),
CumulativeWeldJoints AS (
-- 累计完成焊口
SELECT jot.ProjectId, SUM(ISNULL(jot.Size, 0)) AS FinishSize
FROM dbo.HJGL_WeldJoint jot
INNER JOIN dbo.HJGL_WeldingDaily wd ON jot.WeldingDailyId = wd.WeldingDailyId
WHERE jot.ProjectId = @ProjectId AND jot.WeldingDailyId IS NOT NULL AND wd.WeldingDate <= @WeldingDate
GROUP BY jot.ProjectId
)
SELECT b.ProjectId,
ISNULL(aw.TotalDin, 0) AS TotalDin,
ISNULL(tw.TodayFinishSize, 0) AS TodayFinishSize,
ISNULL(cw.FinishSize, 0) AS FinishSize,
CONVERT(NVARCHAR(10), CAST(CASE ISNULL(aw.TotalDin, 0) WHEN 0 THEN 0
ELSE 100.0 * ISNULL(cw.FinishSize, 0) / (1.0 * aw.TotalDin) END AS DECIMAL(8, 2))) + '%' AS Rate
FROM Base_Project b
LEFT JOIN AllWeldJoints aw ON b.ProjectId = aw.ProjectId
LEFT JOIN TodayWeldJoints tw ON b.ProjectId = tw.ProjectId
LEFT JOIN CumulativeWeldJoints cw ON b.ProjectId = cw.ProjectId
strSql=@"select ProjectId,TotalDin,TodayFinishSize,FinishSize,CONVERT(NVARCHAR(10),(CAST((CASE ISNULL(TotalDin,0) WHEN 0 THEN 0
// 优化:使用 CTE 和 LEFT JOIN 替代嵌套子查询(时间段模式)
ELSE 100.0 * ISNULL(FinishSize,0)/(1.0 * TotalDin) END) AS DECIMAL(8,2))))+'%'
strSql=@"
AS Rate from
WITH AllWeldJoints AS (
(select b.ProjectId,CAST((SELECT ISNULL(SUM(ISNULL(Size,0)),0) FROM dbo.HJGL_WeldJoint WHERE ProjectId=b.ProjectId) AS DECIMAL(12,3)) AS TotalDin,
SELECT ProjectId, SUM(ISNULL(Size,0)) AS TotalDin
CAST((SELECT ISNULL(SUM(ISNULL(jot.Size,0)),0) FROM dbo.HJGL_WeldJoint jot left join dbo.HJGL_WeldingDaily d on d.WeldingDailyId=jot.WeldingDailyId WHERE jot.ProjectId=b.ProjectId AND jot.WeldingDailyId IS NOT NULL and d.WeldingDate>=@WeldingStartDate and d.WeldingDate<=@WeldingEndDate) AS DECIMAL(12,3)) AS TodayFinishSize,
FROM dbo.HJGL_WeldJoint
CAST((SELECT ISNULL(SUM(ISNULL(jot.Size,0)),0) FROM dbo.HJGL_WeldJoint jot left join dbo.HJGL_WeldingDaily d on d.WeldingDailyId=jot.WeldingDailyId WHERE jot.ProjectId=b.ProjectId AND jot.WeldingDailyId IS NOT NULL and d.WeldingDate<=@WeldingEndDate) AS DECIMAL(12,3)) AS FinishSize
WHERE ProjectId = @ProjectId
from Base_Project b) v where ProjectId=@ProjectId ";
GROUP BY ProjectId
),
PeriodWeldJoints AS (
SELECT jot.ProjectId, SUM(ISNULL(jot.Size, 0)) AS TodayFinishSize
FROM dbo.HJGL_WeldJoint jot
INNER JOIN dbo.HJGL_WeldingDaily wd ON jot.WeldingDailyId = wd.WeldingDailyId
WHERE jot.ProjectId = @ProjectId AND jot.WeldingDailyId IS NOT NULL
AND wd.WeldingDate >= @WeldingStartDate AND wd.WeldingDate <= @WeldingEndDate
GROUP BY jot.ProjectId
),
CumulativeWeldJoints AS (
SELECT jot.ProjectId, SUM(ISNULL(jot.Size, 0)) AS FinishSize
FROM dbo.HJGL_WeldJoint jot
INNER JOIN dbo.HJGL_WeldingDaily wd ON jot.WeldingDailyId = wd.WeldingDailyId
WHERE jot.ProjectId = @ProjectId AND jot.WeldingDailyId IS NOT NULL AND wd.WeldingDate <= @WeldingEndDate
GROUP BY jot.ProjectId
)
SELECT b.ProjectId,
ISNULL(aw.TotalDin, 0) AS TotalDin,
ISNULL(pw.TodayFinishSize, 0) AS TodayFinishSize,
ISNULL(cw.FinishSize, 0) AS FinishSize,
CONVERT(NVARCHAR(10), CAST(CASE ISNULL(aw.TotalDin, 0) WHEN 0 THEN 0
ELSE 100.0 * ISNULL(cw.FinishSize, 0) / (1.0 * aw.TotalDin) END AS DECIMAL(8, 2))) + '%' AS Rate
FROM Base_Project b
LEFT JOIN AllWeldJoints aw ON b.ProjectId = aw.ProjectId
LEFT JOIN PeriodWeldJoints pw ON b.ProjectId = pw.ProjectId
LEFT JOIN CumulativeWeldJoints cw ON b.ProjectId = cw.ProjectId
strSql=@"select '工厂预制焊口' as PipeArea,UnitWorkId,TotalDin,TodayFinishSize,FinishSize,CONVERT(NVARCHAR(10),(CAST((CASE ISNULL(TotalDin,0) WHEN 0 THEN 0
// 优化:使用 CTE 和条件聚合替代 UNION 和嵌套子查询
ELSE 100.0 * ISNULL(FinishSize,0)/(1.0 * TotalDin) END) AS DECIMAL(8,2))))+'%'
strSql=@"
AS Rate from
WITH UnitWorkData AS (
(select b.UnitWorkId,CAST((SELECT ISNULL(SUM(ISNULL(Size,0)),0) FROM dbo.HJGL_WeldJoint jot left join dbo.HJGL_Pipeline pipeline on jot.PipelineId=pipeline.PipelineId WHERE pipeline.UnitWorkId=b.UnitWorkId and PipeArea='1' and jot.JointAttribute='预制口') AS DECIMAL(12,3)) AS TotalDin,
-- 获取单位工程的管线数据
CAST((SELECT ISNULL(SUM(ISNULL(jot.Size,0)),0) FROM dbo.HJGL_WeldJoint jot left join dbo.HJGL_Pipeline pipeline on jot.PipelineId=pipeline.PipelineId left join dbo.HJGL_WeldingDaily d on d.WeldingDailyId=jot.WeldingDailyId WHERE pipeline.UnitWorkId=b.UnitWorkId and PipeArea='1' and jot.JointAttribute='预制口' AND jot.WeldingDailyId IS NOT NULL and d.WeldingDate=@WeldingDate) AS DECIMAL(12,3)) AS TodayFinishSize,
SELECT p.PipelineId, p.PipeArea, p.UnitWorkId
CAST((SELECT ISNULL(SUM(ISNULL(jot.Size,0)),0) FROM dbo.HJGL_WeldJoint jot left join dbo.HJGL_Pipeline pipeline on jot.PipelineId=pipeline.PipelineId left join dbo.HJGL_WeldingDaily d on d.WeldingDailyId=jot.WeldingDailyId WHERE pipeline.UnitWorkId=b.UnitWorkId and PipeArea='1' and jot.JointAttribute='预制口' AND jot.WeldingDailyId IS NOT NULL and d.WeldingDate<=@WeldingDate) AS DECIMAL(12,3)) AS FinishSize
FROM dbo.HJGL_Pipeline p
from WBS_UnitWork b) v where UnitWorkId=@UnitWorkId
WHERE p.UnitWorkId = @UnitWorkId
union
),
select '现场施工焊口' as PipeArea,UnitWorkId,TotalDin,TodayFinishSize,FinishSize,CONVERT(NVARCHAR(10),(CAST((CASE ISNULL(TotalDin,0) WHEN 0 THEN 0
JointData AS (
ELSE 100.0 * ISNULL(FinishSize,0)/(1.0 * TotalDin) END) AS DECIMAL(8,2))))+'%'
-- 获取焊口数据并分类
AS Rate from
SELECT
(select b.UnitWorkId,CAST((SELECT ISNULL(SUM(ISNULL(Size,0)),0) FROM dbo.HJGL_WeldJoint jot left join dbo.HJGL_Pipeline pipeline on jot.PipelineId=pipeline.PipelineId WHERE pipeline.UnitWorkId=b.UnitWorkId and PipeArea='2')+(SELECT ISNULL(SUM(ISNULL(Size,0)),0) FROM dbo.HJGL_WeldJoint jot left join dbo.HJGL_Pipeline pipeline on jot.PipelineId=pipeline.PipelineId WHERE pipeline.UnitWorkId=b.UnitWorkId and PipeArea='1' and jot.JointAttribute='安装口') AS DECIMAL(12,3)) AS TotalDin,
j.WeldJointId,
CAST((SELECT ISNULL(SUM(ISNULL(jot.Size,0)),0) FROM dbo.HJGL_WeldJoint jot left join dbo.HJGL_Pipeline pipeline on jot.PipelineId=pipeline.PipelineId left join dbo.HJGL_WeldingDaily d on d.WeldingDailyId=jot.WeldingDailyId WHERE pipeline.UnitWorkId=b.UnitWorkId and PipeArea='2' AND jot.WeldingDailyId IS NOT NULL and d.WeldingDate=@WeldingDate)+(SELECT ISNULL(SUM(ISNULL(jot.Size,0)),0) FROM dbo.HJGL_WeldJoint jot left join dbo.HJGL_Pipeline pipeline on jot.PipelineId=pipeline.PipelineId left join dbo.HJGL_WeldingDaily d on d.WeldingDailyId=jot.WeldingDailyId WHERE pipeline.UnitWorkId=b.UnitWorkId and PipeArea='1' and jot.JointAttribute='安装口' AND jot.WeldingDailyId IS NOT NULL and d.WeldingDate=@WeldingDate) AS DECIMAL(12,3)) AS TodayFinishSize,
j.Size,
CAST((SELECT ISNULL(SUM(ISNULL(jot.Size,0)),0) FROM dbo.HJGL_WeldJoint jot left join dbo.HJGL_Pipeline pipeline on jot.PipelineId=pipeline.PipelineId left join dbo.HJGL_WeldingDaily d on d.WeldingDailyId=jot.WeldingDailyId WHERE pipeline.UnitWorkId=b.UnitWorkId and PipeArea='2' AND jot.WeldingDailyId IS NOT NULL and d.WeldingDate<=@WeldingDate)+(SELECT ISNULL(SUM(ISNULL(jot.Size,0)),0) FROM dbo.HJGL_WeldJoint jot left join dbo.HJGL_Pipeline pipeline on jot.PipelineId=pipeline.PipelineId left join dbo.HJGL_WeldingDaily d on d.WeldingDailyId=jot.WeldingDailyId WHERE pipeline.UnitWorkId=b.UnitWorkId and PipeArea='1' and jot.JointAttribute='安装口' AND jot.WeldingDailyId IS NOT NULL and d.WeldingDate<=@WeldingDate) AS DECIMAL(12,3)) AS FinishSize
j.WeldingDailyId,
from WBS_UnitWork b) v where UnitWorkId=@UnitWorkId";
j.JointAttribute,
p.PipeArea,
p.UnitWorkId
FROM dbo.HJGL_WeldJoint j
INNER JOIN UnitWorkData p ON j.PipelineId = p.PipelineId
),
WeldingInfo AS (
-- 焊接日期信息
SELECT wd.WeldingDailyId, wd.WeldingDate
FROM dbo.HJGL_WeldingDaily wd
WHERE wd.WeldingDate = @WeldingDate
),
Stats AS (
SELECT
ud.UnitWorkId,
-- 工厂预制总量
SUM(CASE WHEN ud.PipeArea = '1' AND jd.JointAttribute = '预制口' THEN ISNULL(jd.Size, 0) ELSE 0 END) AS FactoryTotal,
-- 现场施工总量 (PipeArea='2' 或 PipeArea='1' 且为安装口)
SUM(CASE WHEN ud.PipeArea = '2' OR (ud.PipeArea = '1' AND jd.JointAttribute = '安装口') THEN ISNULL(jd.Size, 0) ELSE 0 END) AS SiteTotal,
-- 工厂预制当日完成
SUM(CASE WHEN ud.PipeArea = '1' AND jd.JointAttribute = '预制口' AND jd.WeldingDailyId IS NOT NULL AND wi.WeldingDailyId IS NOT NULL THEN ISNULL(jd.Size, 0) ELSE 0 END) AS FactoryToday,
-- 现场施工当日完成
SUM(CASE WHEN (ud.PipeArea = '2' OR (ud.PipeArea = '1' AND jd.JointAttribute = '安装口')) AND jd.WeldingDailyId IS NOT NULL AND wi.WeldingDailyId IS NOT NULL THEN ISNULL(jd.Size, 0) ELSE 0 END) AS SiteToday,
-- 工厂预制累计完成
SUM(CASE WHEN ud.PipeArea = '1' AND jd.JointAttribute = '预制口' AND jd.WeldingDailyId IS NOT NULL THEN ISNULL(jd.Size, 0) ELSE 0 END) AS FactoryCumulative,
-- 现场施工累计完成
SUM(CASE WHEN (ud.PipeArea = '2' OR (ud.PipeArea = '1' AND jd.JointAttribute = '安装口')) AND jd.WeldingDailyId IS NOT NULL THEN ISNULL(jd.Size, 0) ELSE 0 END) AS SiteCumulative
FROM UnitWorkData ud
LEFT JOIN JointData jd ON ud.PipelineId = jd.PipelineId
LEFT JOIN WeldingInfo wi ON jd.WeldingDailyId = wi.WeldingDailyId
GROUP BY ud.UnitWorkId
)
SELECT '工厂预制焊口' AS PipeArea, UnitWorkId,
CAST(ISNULL(FactoryTotal, 0) AS DECIMAL(12, 3)) AS TotalDin,
CAST(ISNULL(FactoryToday, 0) AS DECIMAL(12, 3)) AS TodayFinishSize,
CAST(ISNULL(FactoryCumulative, 0) AS DECIMAL(12, 3)) AS FinishSize,
CONVERT(NVARCHAR(10), CAST(CASE ISNULL(FactoryTotal, 0) WHEN 0 THEN 0
ELSE 100.0 * ISNULL(FactoryCumulative, 0) / (1.0 * FactoryTotal) END AS DECIMAL(8, 2))) + '%' AS Rate
FROM Stats
WHERE UnitWorkId = @UnitWorkId
UNION ALL
SELECT '现场施工焊口' AS PipeArea, UnitWorkId,
CAST(ISNULL(SiteTotal, 0) AS DECIMAL(12, 3)) AS TotalDin,
CAST(ISNULL(SiteToday, 0) AS DECIMAL(12, 3)) AS TodayFinishSize,
CAST(ISNULL(SiteCumulative, 0) AS DECIMAL(12, 3)) AS FinishSize,
CONVERT(NVARCHAR(10), CAST(CASE ISNULL(SiteTotal, 0) WHEN 0 THEN 0
ELSE 100.0 * ISNULL(SiteCumulative, 0) / (1.0 * SiteTotal) END AS DECIMAL(8, 2))) + '%' AS Rate
strSql=@"select '工厂预制焊口' as PipeArea,UnitWorkId,TotalDin,TodayFinishSize,FinishSize,CONVERT(NVARCHAR(10),(CAST((CASE ISNULL(TotalDin,0) WHEN 0 THEN 0
// 优化:使用 CTE 和条件聚合(时间段模式)
ELSE 100.0 * ISNULL(FinishSize,0)/(1.0 * TotalDin) END) AS DECIMAL(8,2))))+'%'
strSql=@"
AS Rate from
WITH UnitWorkData AS (
(select b.UnitWorkId,CAST((SELECT ISNULL(SUM(ISNULL(Size,0)),0) FROM dbo.HJGL_WeldJoint jot left join dbo.HJGL_Pipeline pipeline on jot.PipelineId=pipeline.PipelineId WHERE pipeline.UnitWorkId=b.UnitWorkId and PipeArea='1' and jot.JointAttribute='预制口') AS DECIMAL(12,3)) AS TotalDin,
SELECT p.PipelineId, p.PipeArea, p.UnitWorkId
CAST((SELECT ISNULL(SUM(ISNULL(jot.Size,0)),0) FROM dbo.HJGL_WeldJoint jot left join dbo.HJGL_Pipeline pipeline on jot.PipelineId=pipeline.PipelineId left join dbo.HJGL_WeldingDaily d on d.WeldingDailyId=jot.WeldingDailyId WHERE pipeline.UnitWorkId=b.UnitWorkId and PipeArea='1' and jot.JointAttribute='预制口' AND jot.WeldingDailyId IS NOT NULL and d.WeldingDate>=@WeldingStartDate and d.WeldingDate<=@WeldingEndDate) AS DECIMAL(12,3)) AS TodayFinishSize,
FROM dbo.HJGL_Pipeline p
CAST((SELECT ISNULL(SUM(ISNULL(jot.Size,0)),0) FROM dbo.HJGL_WeldJoint jot left join dbo.HJGL_Pipeline pipeline on jot.PipelineId=pipeline.PipelineId left join dbo.HJGL_WeldingDaily d on d.WeldingDailyId=jot.WeldingDailyId WHERE pipeline.UnitWorkId=b.UnitWorkId and PipeArea='1' and jot.JointAttribute='预制口' AND jot.WeldingDailyId IS NOT NULL and d.WeldingDate<=@WeldingEndDate) AS DECIMAL(12,3)) AS FinishSize
WHERE p.UnitWorkId = @UnitWorkId
from WBS_UnitWork b) v where UnitWorkId=@UnitWorkId
),
union
JointData AS (
select '现场施工焊口' as PipeArea,UnitWorkId,TotalDin,TodayFinishSize,FinishSize,CONVERT(NVARCHAR(10),(CAST((CASE ISNULL(TotalDin,0) WHEN 0 THEN 0
SELECT
ELSE 100.0 * ISNULL(FinishSize,0)/(1.0 * TotalDin) END) AS DECIMAL(8,2))))+'%'
j.WeldJointId,
AS Rate from
j.Size,
(select b.UnitWorkId,CAST((SELECT ISNULL(SUM(ISNULL(Size,0)),0) FROM dbo.HJGL_WeldJoint jot left join dbo.HJGL_Pipeline pipeline on jot.PipelineId=pipeline.PipelineId WHERE pipeline.UnitWorkId=b.UnitWorkId and PipeArea='2')+(SELECT ISNULL(SUM(ISNULL(Size,0)),0) FROM dbo.HJGL_WeldJoint jot left join dbo.HJGL_Pipeline pipeline on jot.PipelineId=pipeline.PipelineId WHERE pipeline.UnitWorkId=b.UnitWorkId and PipeArea='1' and jot.JointAttribute='安装口') AS DECIMAL(12,3)) AS TotalDin,
j.WeldingDailyId,
CAST((SELECT ISNULL(SUM(ISNULL(jot.Size,0)),0) FROM dbo.HJGL_WeldJoint jot left join dbo.HJGL_Pipeline pipeline on jot.PipelineId=pipeline.PipelineId left join dbo.HJGL_WeldingDaily d on d.WeldingDailyId=jot.WeldingDailyId WHERE pipeline.UnitWorkId=b.UnitWorkId and PipeArea='2' AND jot.WeldingDailyId IS NOT NULL and d.WeldingDate>=@WeldingStartDate and d.WeldingDate<=@WeldingEndDate)+(SELECT ISNULL(SUM(ISNULL(jot.Size,0)),0) FROM dbo.HJGL_WeldJoint jot left join dbo.HJGL_Pipeline pipeline on jot.PipelineId=pipeline.PipelineId left join dbo.HJGL_WeldingDaily d on d.WeldingDailyId=jot.WeldingDailyId WHERE pipeline.UnitWorkId=b.UnitWorkId and PipeArea='1' and jot.JointAttribute='安装口' AND jot.WeldingDailyId IS NOT NULL and d.WeldingDate>=@WeldingStartDate and d.WeldingDate<=@WeldingEndDate) AS DECIMAL(12,3)) AS TodayFinishSize,
j.JointAttribute,
CAST((SELECT ISNULL(SUM(ISNULL(jot.Size,0)),0) FROM dbo.HJGL_WeldJoint jot left join dbo.HJGL_Pipeline pipeline on jot.PipelineId=pipeline.PipelineId left join dbo.HJGL_WeldingDaily d on d.WeldingDailyId=jot.WeldingDailyId WHERE pipeline.UnitWorkId=b.UnitWorkId and PipeArea='2' AND jot.WeldingDailyId IS NOT NULL and d.WeldingDate<=@WeldingEndDate)+(SELECT ISNULL(SUM(ISNULL(jot.Size,0)),0) FROM dbo.HJGL_WeldJoint jot left join dbo.HJGL_Pipeline pipeline on jot.PipelineId=pipeline.PipelineId left join dbo.HJGL_WeldingDaily d on d.WeldingDailyId=jot.WeldingDailyId WHERE pipeline.UnitWorkId=b.UnitWorkId and PipeArea='1' and jot.JointAttribute='安装口' AND jot.WeldingDailyId IS NOT NULL and d.WeldingDate<=@WeldingEndDate) AS DECIMAL(12,3)) AS FinishSize
p.PipeArea,
from WBS_UnitWork b) v where UnitWorkId=@UnitWorkId";
p.UnitWorkId
FROM dbo.HJGL_WeldJoint j
INNER JOIN UnitWorkData p ON j.PipelineId = p.PipelineId
),
WeldingInfo AS (
SELECT wd.WeldingDailyId, wd.WeldingDate
FROM dbo.HJGL_WeldingDaily wd
WHERE wd.WeldingDate >= @WeldingStartDate AND wd.WeldingDate <= @WeldingEndDate
),
Stats AS (
SELECT
ud.UnitWorkId,
SUM(CASE WHEN ud.PipeArea = '1' AND jd.JointAttribute = '预制口' THEN ISNULL(jd.Size, 0) ELSE 0 END) AS FactoryTotal,
SUM(CASE WHEN ud.PipeArea = '2' OR (ud.PipeArea = '1' AND jd.JointAttribute = '安装口') THEN ISNULL(jd.Size, 0) ELSE 0 END) AS SiteTotal,
SUM(CASE WHEN ud.PipeArea = '1' AND jd.JointAttribute = '预制口' AND jd.WeldingDailyId IS NOT NULL AND wi.WeldingDailyId IS NOT NULL THEN ISNULL(jd.Size, 0) ELSE 0 END) AS FactoryToday,
SUM(CASE WHEN (ud.PipeArea = '2' OR (ud.PipeArea = '1' AND jd.JointAttribute = '安装口')) AND jd.WeldingDailyId IS NOT NULL AND wi.WeldingDailyId IS NOT NULL THEN ISNULL(jd.Size, 0) ELSE 0 END) AS SiteToday,
SUM(CASE WHEN ud.PipeArea = '1' AND jd.JointAttribute = '预制口' AND jd.WeldingDailyId IS NOT NULL AND wi.WeldingDate <= @WeldingEndDate THEN ISNULL(jd.Size, 0) ELSE 0 END) AS FactoryCumulative,
SUM(CASE WHEN (ud.PipeArea = '2' OR (ud.PipeArea = '1' AND jd.JointAttribute = '安装口')) AND jd.WeldingDailyId IS NOT NULL AND wi.WeldingDate <= @WeldingEndDate THEN ISNULL(jd.Size, 0) ELSE 0 END) AS SiteCumulative
FROM UnitWorkData ud
LEFT JOIN JointData jd ON ud.PipelineId = jd.PipelineId
LEFT JOIN WeldingInfo wi ON jd.WeldingDailyId = wi.WeldingDailyId
GROUP BY ud.UnitWorkId
)
SELECT '工厂预制焊口' AS PipeArea, UnitWorkId,
CAST(ISNULL(FactoryTotal, 0) AS DECIMAL(12, 3)) AS TotalDin,
CAST(ISNULL(FactoryToday, 0) AS DECIMAL(12, 3)) AS TodayFinishSize,
CAST(ISNULL(FactoryCumulative, 0) AS DECIMAL(12, 3)) AS FinishSize,
CONVERT(NVARCHAR(10), CAST(CASE ISNULL(FactoryTotal, 0) WHEN 0 THEN 0
ELSE 100.0 * ISNULL(FactoryCumulative, 0) / (1.0 * FactoryTotal) END AS DECIMAL(8, 2))) + '%' AS Rate
FROM Stats
WHERE UnitWorkId = @UnitWorkId
UNION ALL
SELECT '现场施工焊口' AS PipeArea, UnitWorkId,
CAST(ISNULL(SiteTotal, 0) AS DECIMAL(12, 3)) AS TotalDin,
CAST(ISNULL(SiteToday, 0) AS DECIMAL(12, 3)) AS TodayFinishSize,
CAST(ISNULL(SiteCumulative, 0) AS DECIMAL(12, 3)) AS FinishSize,
CONVERT(NVARCHAR(10), CAST(CASE ISNULL(SiteTotal, 0) WHEN 0 THEN 0
ELSE 100.0 * ISNULL(SiteCumulative, 0) / (1.0 * SiteTotal) END AS DECIMAL(8, 2))) + '%' AS Rate
CAST((SELECT ISNULL(SUM(ISNULL(jot.Size,0)),0) FROM dbo.HJGL_WeldJoint jot left join dbo.HJGL_WeldingDaily d on d.WeldingDailyId=jot.WeldingDailyId WHERE d.ProjectId=@ProjectId and d.UnitId=b.UnitId and jot.WeldingDailyId IS NOT NULL and d.WeldingDate=@WeldingDate) AS DECIMAL(12,3)) AS TodayFinishSize,
strSql=@"
CAST((SELECT ISNULL(SUM(ISNULL(jot.Size,0)),0) FROM dbo.HJGL_WeldJoint jot left join dbo.HJGL_WeldingDaily d on d.WeldingDailyId=jot.WeldingDailyId WHERE d.ProjectId=@ProjectId and d.UnitId=b.UnitId and jot.WeldingDailyId IS NOT NULL and d.WeldingDate<=@WeldingDate) AS DECIMAL(12,3)) AS FinishSize
WITH UnitWeldingDaily AS (
from HJGL_WeldingDaily b
-- 获取项目的所有焊接日报记录
left join Base_Unit u on b.UnitId=u.UnitId
SELECT DISTINCT wd.UnitId, u.UnitName
where b.ProjectId=@ProjectId ";
FROM dbo.HJGL_WeldingDaily wd
INNER JOIN Base_Unit u ON wd.UnitId = u.UnitId
WHERE wd.ProjectId = @ProjectId
),
TodayStats AS (
-- 当日完成统计
SELECT wd.UnitId, SUM(ISNULL(jot.Size, 0)) AS TodayFinishSize
FROM dbo.HJGL_WeldingDaily wd
INNER JOIN dbo.HJGL_WeldJoint jot ON jot.WeldingDailyId = wd.WeldingDailyId
WHERE wd.ProjectId = @ProjectId AND wd.WeldingDate = @WeldingDate AND jot.WeldingDailyId IS NOT NULL
GROUP BY wd.UnitId
),
CumulativeStats AS (
-- 累计完成统计
SELECT wd.UnitId, SUM(ISNULL(jot.Size, 0)) AS FinishSize
FROM dbo.HJGL_WeldingDaily wd
INNER JOIN dbo.HJGL_WeldJoint jot ON jot.WeldingDailyId = wd.WeldingDailyId
WHERE wd.ProjectId = @ProjectId AND wd.WeldingDate <= @WeldingDate AND jot.WeldingDailyId IS NOT NULL
GROUP BY wd.UnitId
)
SELECT uwd.UnitName,
CAST(ISNULL(ts.TodayFinishSize, 0) AS DECIMAL(12, 3)) AS TodayFinishSize,
CAST(ISNULL(cs.FinishSize, 0) AS DECIMAL(12, 3)) AS FinishSize
FROM UnitWeldingDaily uwd
LEFT JOIN TodayStats ts ON uwd.UnitId = ts.UnitId
LEFT JOIN CumulativeStats cs ON uwd.UnitId = cs.UnitId";
CAST((SELECT ISNULL(SUM(ISNULL(jot.Size,0)),0) FROM dbo.HJGL_WeldJoint jot left join dbo.HJGL_WeldingDaily d on d.WeldingDailyId=jot.WeldingDailyId WHERE d.ProjectId=@ProjectId and d.UnitId=b.UnitId and jot.WeldingDailyId IS NOT NULL and d.WeldingDate>=@WeldingStartDate and d.WeldingDate<=@WeldingEndDate) AS DECIMAL(12,3)) AS TodayFinishSize,
strSql=@"
CAST((SELECT ISNULL(SUM(ISNULL(jot.Size,0)),0) FROM dbo.HJGL_WeldJoint jot left join dbo.HJGL_WeldingDaily d on d.WeldingDailyId=jot.WeldingDailyId WHERE d.ProjectId=@ProjectId and d.UnitId=b.UnitId and jot.WeldingDailyId IS NOT NULL and d.WeldingDate<=@WeldingEndDate) AS DECIMAL(12,3)) AS FinishSize
WITH UnitWeldingDaily AS (
from HJGL_WeldingDaily b
SELECT DISTINCT wd.UnitId, u.UnitName
left join Base_Unit u on b.UnitId=u.UnitId
FROM dbo.HJGL_WeldingDaily wd
where b.ProjectId=@ProjectId ";
INNER JOIN Base_Unit u ON wd.UnitId = u.UnitId
WHERE wd.ProjectId = @ProjectId
),
PeriodStats AS (
-- 时间段完成统计
SELECT wd.UnitId, SUM(ISNULL(jot.Size, 0)) AS TodayFinishSize
FROM dbo.HJGL_WeldingDaily wd
INNER JOIN dbo.HJGL_WeldJoint jot ON jot.WeldingDailyId = wd.WeldingDailyId
WHERE wd.ProjectId = @ProjectId AND wd.WeldingDate >= @WeldingStartDate AND wd.WeldingDate <= @WeldingEndDate AND jot.WeldingDailyId IS NOT NULL
GROUP BY wd.UnitId
),
CumulativeStats AS (
-- 累计完成统计
SELECT wd.UnitId, SUM(ISNULL(jot.Size, 0)) AS FinishSize
FROM dbo.HJGL_WeldingDaily wd
INNER JOIN dbo.HJGL_WeldJoint jot ON jot.WeldingDailyId = wd.WeldingDailyId
WHERE wd.ProjectId = @ProjectId AND wd.WeldingDate <= @WeldingEndDate AND jot.WeldingDailyId IS NOT NULL
GROUP BY wd.UnitId
)
SELECT uwd.UnitName,
CAST(ISNULL(ps.TodayFinishSize, 0) AS DECIMAL(12, 3)) AS TodayFinishSize,
CAST(ISNULL(cs.FinishSize, 0) AS DECIMAL(12, 3)) AS FinishSize
FROM UnitWeldingDaily uwd
LEFT JOIN PeriodStats ps ON uwd.UnitId = ps.UnitId
LEFT JOIN CumulativeStats cs ON uwd.UnitId = cs.UnitId";
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.