Compare commits
No commits in common. "3b4677c9c7690eb2f507301165bd06865d9e53f6" and "28e2d735488dd573c5cbee6a2bf8d2c44ba9eb7f" have entirely different histories.
3b4677c9c7
...
28e2d73548
@ -407,6 +407,7 @@
|
||||
SELECT
|
||||
cie.CIRCUIT_NO, cie.OBJECT_NO, cie.PLAN_NO,
|
||||
cie.ITEM_ID AS CIRCUIT_ITEM_ID, cie.CIRCUIT_CFG,
|
||||
cie.CONN_VOL_W, -- 2026-06-30: 저장 시점 유닛별 접속용량(W). 있으면 위치기반 추정보다 우선 사용(동일 PCS 모델 다중 유닛 대응)
|
||||
(SELECT SUM(CAST(LTRIM(RTRIM(x.X.value('.','VARCHAR(10)'))) AS INT))
|
||||
FROM (SELECT CAST('<X>'+REPLACE(cie.CIRCUIT_CFG,',','</X><X>')+'</X>' AS XML) AS d) t
|
||||
CROSS APPLY t.d.nodes('/X') AS x(X)
|
||||
@ -417,11 +418,14 @@
|
||||
),
|
||||
CC AS (
|
||||
SELECT cs.*,
|
||||
-- 2026-06-30: 누적 윈도우를 PCS(CIRCUIT_ITEM_ID) 내부로 한정 — 회로 위치가 다른 PCS 모듈까지 끌어오던 오배분 차단
|
||||
ISNULL((SELECT SUM(c2.CIRCUIT_SUM) FROM CS c2
|
||||
WHERE c2.OBJECT_NO=cs.OBJECT_NO AND c2.PLAN_NO=cs.PLAN_NO
|
||||
AND c2.CIRCUIT_ITEM_ID = cs.CIRCUIT_ITEM_ID
|
||||
AND c2.CIRCUIT_NO < cs.CIRCUIT_NO), 0) AS CUM_START,
|
||||
ISNULL((SELECT SUM(c2.CIRCUIT_SUM) FROM CS c2
|
||||
WHERE c2.OBJECT_NO=cs.OBJECT_NO AND c2.PLAN_NO=cs.PLAN_NO
|
||||
AND c2.CIRCUIT_ITEM_ID = cs.CIRCUIT_ITEM_ID
|
||||
AND c2.CIRCUIT_NO <= cs.CIRCUIT_NO), 0) AS CUM_END
|
||||
FROM CS cs
|
||||
),
|
||||
@ -430,11 +434,14 @@
|
||||
rie.ROOF_ITEM_NO, rie.ROOF_SURFACE_ID, rie.OBJECT_NO, rie.PLAN_NO,
|
||||
rie.ITEM_ID AS ROOF_ITEM_ID, rie.ITEM_NAME,
|
||||
CAST(rie.SPECIFICATION AS FLOAT) AS SPEC, rie.AMOUNT, rie.PC_ITEM_ID,
|
||||
-- 2026-06-30: 모듈 누적도 PCS(PC_ITEM_ID) 내부로 한정 — 실제 배선된 PCS의 모듈만 누적
|
||||
ISNULL((SELECT SUM(r2.AMOUNT) FROM T_PART_ROOF_ITEM_ESTIMATE r2
|
||||
WHERE r2.OBJECT_NO=rie.OBJECT_NO AND r2.PLAN_NO=rie.PLAN_NO
|
||||
AND r2.PC_ITEM_ID = rie.PC_ITEM_ID
|
||||
AND r2.ROOF_ITEM_NO < rie.ROOF_ITEM_NO), 0) AS CUM_START,
|
||||
ISNULL((SELECT SUM(r2.AMOUNT) FROM T_PART_ROOF_ITEM_ESTIMATE r2
|
||||
WHERE r2.OBJECT_NO=rie.OBJECT_NO AND r2.PLAN_NO=rie.PLAN_NO
|
||||
AND r2.PC_ITEM_ID = rie.PC_ITEM_ID
|
||||
AND r2.ROOF_ITEM_NO <= rie.ROOF_ITEM_NO), 0) AS CUM_END
|
||||
FROM T_PART_ROOF_ITEM_ESTIMATE rie
|
||||
WHERE rie.OBJECT_NO = #{objectNo} AND rie.PLAN_NO = #{planNo}
|
||||
@ -447,7 +454,9 @@
|
||||
CASE WHEN cc.CUM_END < rc.CUM_END THEN cc.CUM_END ELSE rc.CUM_END END
|
||||
- CASE WHEN cc.CUM_START > rc.CUM_START THEN cc.CUM_START ELSE rc.CUM_START END AS ALLOCATED_QTY
|
||||
FROM CC cc
|
||||
-- 2026-06-30: 실제 배선(PCS) 일치 조건 추가 — 회로의 PCS 와 모듈이 배선된 PCS 가 같은 경우만 겹침
|
||||
INNER JOIN RC rc ON cc.OBJECT_NO = rc.OBJECT_NO AND cc.PLAN_NO = rc.PLAN_NO
|
||||
AND cc.CIRCUIT_ITEM_ID = rc.PC_ITEM_ID
|
||||
WHERE cc.CUM_START < rc.CUM_END AND cc.CUM_END > rc.CUM_START
|
||||
),
|
||||
DETAIL AS (
|
||||
@ -458,17 +467,27 @@
|
||||
(SELECT mi.PNOW_W FROM M_ITEM mi WHERE mi.ITEM_ID = a.CIRCUIT_ITEM_ID) AS PNOW_W
|
||||
FROM ALLOC a
|
||||
),
|
||||
CIRCUIT_AGG AS (
|
||||
SELECT
|
||||
CIRCUIT_NO, CIRCUIT_ITEM_ID, CIRCUIT_CFG, CIRCUIT_SUM,
|
||||
SUM(SPEC_X_QTY) AS SUM_SPEC_X_QTY, PNOW_W,
|
||||
CASE WHEN SUM(SPEC_X_QTY) <= PNOW_W THEN SUM(SPEC_X_QTY) ELSE PNOW_W END AS MIN_VALUE
|
||||
POS AS (
|
||||
-- 위치기반(폴백) 유닛별 접속용량 W 합 — CONN_VOL_W 가 없는 기존 데이터에만 사용
|
||||
SELECT CIRCUIT_NO, CIRCUIT_ITEM_ID, SUM(SPEC_X_QTY) AS POS_W
|
||||
FROM DETAIL
|
||||
GROUP BY CIRCUIT_NO, CIRCUIT_ITEM_ID, CIRCUIT_CFG, CIRCUIT_SUM, PNOW_W
|
||||
GROUP BY CIRCUIT_NO, CIRCUIT_ITEM_ID
|
||||
),
|
||||
CIRCUIT_AGG AS (
|
||||
-- 2026-06-30 option B: 저장된 CONN_VOL_W 우선, 없으면(NULL=기존 데이터) 위치기반 POS_W 폴백.
|
||||
-- CS(유닛 목록) 기준으로 LEFT JOIN 하므로 유닛별 1행 보장. 유닛별 MIN(접속용량, PNOW_W) 후 합산.
|
||||
SELECT
|
||||
cs.CIRCUIT_NO, cs.CIRCUIT_ITEM_ID,
|
||||
COALESCE(cs.CONN_VOL_W, pos.POS_W, 0) AS CONN_W,
|
||||
(SELECT mi.PNOW_W FROM M_ITEM mi WHERE mi.ITEM_ID = cs.CIRCUIT_ITEM_ID) AS PNOW_W
|
||||
FROM CS cs
|
||||
LEFT JOIN POS pos
|
||||
ON pos.CIRCUIT_NO = cs.CIRCUIT_NO
|
||||
AND pos.CIRCUIT_ITEM_ID = cs.CIRCUIT_ITEM_ID
|
||||
)
|
||||
|
||||
-- 2026-06-05: SQL 은 W 합만 DECIMAL 로 정확히 반환. kW 변환·3자리 절사(FLOOR)는 모듈용량(totVolKw)과 동일하게 Java BigDecimal 에서 수행 → FLOAT 나눗셈 잔여(5.6899999999999995 / 5.339) 원천 차단
|
||||
SELECT CAST(SUM(MIN_VALUE) AS DECIMAL(18,3)) AS CERT_VOL_W
|
||||
SELECT CAST(SUM(CASE WHEN CONN_W <= PNOW_W THEN CONN_W ELSE PNOW_W END) AS DECIMAL(18,3)) AS CERT_VOL_W
|
||||
FROM CIRCUIT_AGG
|
||||
|
||||
]]>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user