행에 표기되도록 수정

This commit is contained in:
leeheejin
2025-11-21 13:19:28 +09:00
parent 65f453d262
commit aefafc1b31
2 changed files with 310 additions and 96 deletions

View File

@@ -492,14 +492,14 @@
WHEN PAID_TYPE = 'paid' THEN '유상'
WHEN PAID_TYPE = 'free' THEN '무상'
ELSE PAID_TYPE
END AS PAID_TYPE
,RECEIPT_DATE
,PART_NO
,PART_NAME
,SERIAL_NO
,QUANTITY
,CUSTOMER_REQUEST
,EXCHANGE_RATE
END AS PAID_TYPE
,RECEIPT_DATE
-- ,PART_NO (아래 품목 요약에서 처리)
,PART_NAME
-- ,SERIAL_NO (아래 서브쿼리에서 처리)
,QUANTITY
-- ,CUSTOMER_REQUEST (아래 서브쿼리에서 처리)
,EXCHANGE_RATE
,EST_PRICE
,EST_SUPPLY_PRICE
,(SELECT COUNT(1) FROM ESTIMATE_TEMPLATE WHERE CONTRACT_OBJID = T.OBJID) AS EST_STATUS
@@ -543,35 +543,103 @@
THEN CAST(T.ORDER_TOTAL_AMOUNT AS NUMERIC) * CAST(T.EXCHANGE_RATE AS NUMERIC)
ELSE 0
END AS ORDER_TOTAL_AMOUNT_KRW
-- 품목 정보 요약
,(
WITH item_info AS (
SELECT
COALESCE(PM.PART_NAME, CI.PART_NAME) AS PART_NAME,
COUNT(*) OVER() AS total_count,
ROW_NUMBER() OVER(ORDER BY CI.SEQ) AS rn
FROM CONTRACT_ITEM CI
LEFT JOIN PART_MNG PM ON CI.PART_OBJID = PM.OBJID
WHERE CI.CONTRACT_OBJID = T.OBJID
AND CI.STATUS = 'ACTIVE'
)
-- 품목 정보 요약
,(
WITH item_info AS (
SELECT
CASE
WHEN total_count = 1 THEN PART_NAME
WHEN total_count > 1 THEN PART_NAME || ' 외 ' || (total_count - 1) || '건'
ELSE ''
END
FROM item_info
WHERE rn = 1
) AS ITEM_SUMMARY
,(
SELECT MIN(DUE_DATE)
FROM CONTRACT_ITEM
WHERE CONTRACT_OBJID = T.OBJID
AND STATUS = 'ACTIVE'
AND DUE_DATE IS NOT NULL
AND DUE_DATE != ''
) AS EARLIEST_DUE_DATE
COALESCE(PM.PART_NAME, CI.PART_NAME) AS PART_NAME,
COALESCE(PM.PART_NO, CI.PART_NO) AS PART_NO,
COUNT(*) OVER() AS total_count,
ROW_NUMBER() OVER(ORDER BY CI.SEQ) AS rn
FROM CONTRACT_ITEM CI
LEFT JOIN PART_MNG PM ON CI.PART_OBJID = PM.OBJID
WHERE CI.CONTRACT_OBJID = T.OBJID
AND CI.STATUS = 'ACTIVE'
)
SELECT
CASE
WHEN total_count = 1 THEN PART_NAME
WHEN total_count > 1 THEN PART_NAME || ' 외 ' || (total_count - 1) || '건'
ELSE ''
END
FROM item_info
WHERE rn = 1
) AS ITEM_SUMMARY
,(
WITH item_info AS (
SELECT
COALESCE(PM.PART_NO, CI.PART_NO) AS PART_NO,
COUNT(*) OVER() AS total_count,
ROW_NUMBER() OVER(ORDER BY CI.SEQ) AS rn
FROM CONTRACT_ITEM CI
LEFT JOIN PART_MNG PM ON CI.PART_OBJID = PM.OBJID
WHERE CI.CONTRACT_OBJID = T.OBJID
AND CI.STATUS = 'ACTIVE'
)
SELECT
CASE
WHEN total_count = 1 THEN PART_NO
WHEN total_count > 1 THEN PART_NO || ' 외 ' || (total_count - 1) || '건'
ELSE T.PART_NO
END
FROM item_info
WHERE rn = 1
) AS PART_NO
,(
WITH serial_info AS (
SELECT
CIS.SERIAL_NO,
COUNT(*) OVER() AS total_count,
ROW_NUMBER() OVER(ORDER BY CI.SEQ, CIS.SEQ) AS rn
FROM CONTRACT_ITEM CI
LEFT JOIN CONTRACT_ITEM_SERIAL CIS
ON CI.OBJID = CIS.ITEM_OBJID
AND CIS.STATUS = 'ACTIVE'
WHERE CI.CONTRACT_OBJID = T.OBJID
AND CI.STATUS = 'ACTIVE'
AND CIS.SERIAL_NO IS NOT NULL
AND CIS.SERIAL_NO != ''
)
SELECT
CASE
WHEN total_count = 0 THEN T.SERIAL_NO
WHEN total_count = 1 THEN SERIAL_NO
WHEN total_count > 1 THEN SERIAL_NO || ' 외 ' || (total_count - 1) || '건'
ELSE ''
END
FROM serial_info
WHERE rn = 1
) AS SERIAL_NO
,(
WITH request_info AS (
SELECT
CI.CUSTOMER_REQUEST,
COUNT(*) OVER() AS total_count,
ROW_NUMBER() OVER(ORDER BY CI.SEQ) AS rn
FROM CONTRACT_ITEM CI
WHERE CI.CONTRACT_OBJID = T.OBJID
AND CI.STATUS = 'ACTIVE'
AND CI.CUSTOMER_REQUEST IS NOT NULL
AND CI.CUSTOMER_REQUEST != ''
)
SELECT
CASE
WHEN total_count = 0 THEN T.CUSTOMER_REQUEST
WHEN total_count = 1 THEN CUSTOMER_REQUEST
WHEN total_count > 1 THEN CUSTOMER_REQUEST || ' 외 ' || (total_count - 1) || '건'
ELSE ''
END
FROM request_info
WHERE rn = 1
) AS CUSTOMER_REQUEST
,(
SELECT MIN(DUE_DATE)
FROM CONTRACT_ITEM
WHERE CONTRACT_OBJID = T.OBJID
AND STATUS = 'ACTIVE'
AND DUE_DATE IS NOT NULL
AND DUE_DATE != ''
) AS EARLIEST_DUE_DATE
,(
SELECT COUNT(*) - 1
FROM CONTRACT_ITEM
@@ -669,19 +737,35 @@
AND result_cd = #{result_cd}
</if>
<if test="receipt_start_date != null and !''.equals(receipt_start_date)">
AND TO_DATE(RECEIPT_DATE,'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{receipt_start_date}, 'YYYY-MM-DD')
</if>
<if test="receipt_end_date != null and !''.equals(receipt_end_date)">
AND TO_DATE(RECEIPT_DATE,'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{receipt_end_date}, 'YYYY-MM-DD')
</if>
<if test="receipt_start_date != null and !''.equals(receipt_start_date)">
AND RECEIPT_DATE IS NOT NULL
AND RECEIPT_DATE != ''
AND (
CASE
WHEN RECEIPT_DATE ~ '^\d{8}$' THEN TO_DATE(RECEIPT_DATE, 'YYYYMMDD')
WHEN RECEIPT_DATE ~ '^\d{4}-\d{2}-\d{2}$' THEN TO_DATE(RECEIPT_DATE, 'YYYY-MM-DD')
ELSE NULL
END
) <![CDATA[ >= ]]> TO_DATE(#{receipt_start_date}, 'YYYY-MM-DD')
</if>
<if test="receipt_end_date != null and !''.equals(receipt_end_date)">
AND RECEIPT_DATE IS NOT NULL
AND RECEIPT_DATE != ''
AND (
CASE
WHEN RECEIPT_DATE ~ '^\d{8}$' THEN TO_DATE(RECEIPT_DATE, 'YYYYMMDD')
WHEN RECEIPT_DATE ~ '^\d{4}-\d{2}-\d{2}$' THEN TO_DATE(RECEIPT_DATE, 'YYYY-MM-DD')
ELSE NULL
END
) <![CDATA[ <= ]]> TO_DATE(#{receipt_end_date}, 'YYYY-MM-DD')
</if>
<if test="due_start_date != null and !''.equals(due_start_date)">
AND TO_DATE(RECEIPT_DATE,'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{due_start_date}, 'YYYY-MM-DD')
</if>
<if test="due_end_date != null and !''.equals(due_end_date)">
AND TO_DATE(DUE_DATE,'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{due_end_date}, 'YYYY-MM-DD')
</if>
<if test="due_start_date != null and !''.equals(due_start_date)">
AND TO_DATE(DUE_DATE,'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{due_start_date}, 'YYYY-MM-DD')
</if>
<if test="due_end_date != null and !''.equals(due_end_date)">
AND TO_DATE(DUE_DATE,'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{due_end_date}, 'YYYY-MM-DD')
</if>
<if test="pm_user_id !=null and pm_user_id !=''">
AND pm_user_id = #{pm_user_id}
@@ -781,6 +865,29 @@
AND UPPER(PO_NO) LIKE UPPER('%${search_poNo}%')
</if>
<if test="receipt_start_date != null and !''.equals(receipt_start_date)">
AND RECEIPT_DATE IS NOT NULL
AND RECEIPT_DATE != ''
AND (
CASE
WHEN RECEIPT_DATE ~ '^\d{8}$' THEN TO_DATE(RECEIPT_DATE, 'YYYYMMDD')
WHEN RECEIPT_DATE ~ '^\d{4}-\d{2}-\d{2}$' THEN TO_DATE(RECEIPT_DATE, 'YYYY-MM-DD')
ELSE NULL
END
) <![CDATA[ >= ]]> TO_DATE(#{receipt_start_date}, 'YYYY-MM-DD')
</if>
<if test="receipt_end_date != null and !''.equals(receipt_end_date)">
AND RECEIPT_DATE IS NOT NULL
AND RECEIPT_DATE != ''
AND (
CASE
WHEN RECEIPT_DATE ~ '^\d{8}$' THEN TO_DATE(RECEIPT_DATE, 'YYYYMMDD')
WHEN RECEIPT_DATE ~ '^\d{4}-\d{2}-\d{2}$' THEN TO_DATE(RECEIPT_DATE, 'YYYY-MM-DD')
ELSE NULL
END
) <![CDATA[ <= ]]> TO_DATE(#{receipt_end_date}, 'YYYY-MM-DD')
</if>
<if test="order_start_date != null and !''.equals(order_start_date)">
AND TO_DATE(ORDER_DATE,'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{order_start_date}, 'YYYY-MM-DD')
</if>

View File

@@ -492,14 +492,14 @@
WHEN PAID_TYPE = 'paid' THEN '유상'
WHEN PAID_TYPE = 'free' THEN '무상'
ELSE PAID_TYPE
END AS PAID_TYPE
,RECEIPT_DATE
,PART_NO
,PART_NAME
,SERIAL_NO
,QUANTITY
,CUSTOMER_REQUEST
,EXCHANGE_RATE
END AS PAID_TYPE
,RECEIPT_DATE
-- ,PART_NO (아래 품목 요약에서 처리)
,PART_NAME
-- ,SERIAL_NO (아래 서브쿼리에서 처리)
,QUANTITY
-- ,CUSTOMER_REQUEST (아래 서브쿼리에서 처리)
,EXCHANGE_RATE
,EST_PRICE
,EST_SUPPLY_PRICE
,(SELECT COUNT(1) FROM ESTIMATE_TEMPLATE WHERE CONTRACT_OBJID = T.OBJID) AS EST_STATUS
@@ -543,35 +543,103 @@
THEN CAST(T.ORDER_TOTAL_AMOUNT AS NUMERIC) * CAST(T.EXCHANGE_RATE AS NUMERIC)
ELSE 0
END AS ORDER_TOTAL_AMOUNT_KRW
-- 품목 정보 요약
,(
WITH item_info AS (
SELECT
COALESCE(PM.PART_NAME, CI.PART_NAME) AS PART_NAME,
COUNT(*) OVER() AS total_count,
ROW_NUMBER() OVER(ORDER BY CI.SEQ) AS rn
FROM CONTRACT_ITEM CI
LEFT JOIN PART_MNG PM ON CI.PART_OBJID = PM.OBJID
WHERE CI.CONTRACT_OBJID = T.OBJID
AND CI.STATUS = 'ACTIVE'
)
-- 품목 정보 요약
,(
WITH item_info AS (
SELECT
CASE
WHEN total_count = 1 THEN PART_NAME
WHEN total_count > 1 THEN PART_NAME || ' 외 ' || (total_count - 1) || '건'
ELSE ''
END
FROM item_info
WHERE rn = 1
) AS ITEM_SUMMARY
,(
SELECT MIN(DUE_DATE)
FROM CONTRACT_ITEM
WHERE CONTRACT_OBJID = T.OBJID
AND STATUS = 'ACTIVE'
AND DUE_DATE IS NOT NULL
AND DUE_DATE != ''
) AS EARLIEST_DUE_DATE
COALESCE(PM.PART_NAME, CI.PART_NAME) AS PART_NAME,
COALESCE(PM.PART_NO, CI.PART_NO) AS PART_NO,
COUNT(*) OVER() AS total_count,
ROW_NUMBER() OVER(ORDER BY CI.SEQ) AS rn
FROM CONTRACT_ITEM CI
LEFT JOIN PART_MNG PM ON CI.PART_OBJID = PM.OBJID
WHERE CI.CONTRACT_OBJID = T.OBJID
AND CI.STATUS = 'ACTIVE'
)
SELECT
CASE
WHEN total_count = 1 THEN PART_NAME
WHEN total_count > 1 THEN PART_NAME || ' 외 ' || (total_count - 1) || '건'
ELSE ''
END
FROM item_info
WHERE rn = 1
) AS ITEM_SUMMARY
,(
WITH item_info AS (
SELECT
COALESCE(PM.PART_NO, CI.PART_NO) AS PART_NO,
COUNT(*) OVER() AS total_count,
ROW_NUMBER() OVER(ORDER BY CI.SEQ) AS rn
FROM CONTRACT_ITEM CI
LEFT JOIN PART_MNG PM ON CI.PART_OBJID = PM.OBJID
WHERE CI.CONTRACT_OBJID = T.OBJID
AND CI.STATUS = 'ACTIVE'
)
SELECT
CASE
WHEN total_count = 1 THEN PART_NO
WHEN total_count > 1 THEN PART_NO || ' 외 ' || (total_count - 1) || '건'
ELSE T.PART_NO
END
FROM item_info
WHERE rn = 1
) AS PART_NO
,(
WITH serial_info AS (
SELECT
CIS.SERIAL_NO,
COUNT(*) OVER() AS total_count,
ROW_NUMBER() OVER(ORDER BY CI.SEQ, CIS.SEQ) AS rn
FROM CONTRACT_ITEM CI
LEFT JOIN CONTRACT_ITEM_SERIAL CIS
ON CI.OBJID = CIS.ITEM_OBJID
AND CIS.STATUS = 'ACTIVE'
WHERE CI.CONTRACT_OBJID = T.OBJID
AND CI.STATUS = 'ACTIVE'
AND CIS.SERIAL_NO IS NOT NULL
AND CIS.SERIAL_NO != ''
)
SELECT
CASE
WHEN total_count = 0 THEN T.SERIAL_NO
WHEN total_count = 1 THEN SERIAL_NO
WHEN total_count > 1 THEN SERIAL_NO || ' 외 ' || (total_count - 1) || '건'
ELSE ''
END
FROM serial_info
WHERE rn = 1
) AS SERIAL_NO
,(
WITH request_info AS (
SELECT
CI.CUSTOMER_REQUEST,
COUNT(*) OVER() AS total_count,
ROW_NUMBER() OVER(ORDER BY CI.SEQ) AS rn
FROM CONTRACT_ITEM CI
WHERE CI.CONTRACT_OBJID = T.OBJID
AND CI.STATUS = 'ACTIVE'
AND CI.CUSTOMER_REQUEST IS NOT NULL
AND CI.CUSTOMER_REQUEST != ''
)
SELECT
CASE
WHEN total_count = 0 THEN T.CUSTOMER_REQUEST
WHEN total_count = 1 THEN CUSTOMER_REQUEST
WHEN total_count > 1 THEN CUSTOMER_REQUEST || ' 외 ' || (total_count - 1) || '건'
ELSE ''
END
FROM request_info
WHERE rn = 1
) AS CUSTOMER_REQUEST
,(
SELECT MIN(DUE_DATE)
FROM CONTRACT_ITEM
WHERE CONTRACT_OBJID = T.OBJID
AND STATUS = 'ACTIVE'
AND DUE_DATE IS NOT NULL
AND DUE_DATE != ''
) AS EARLIEST_DUE_DATE
,(
SELECT COUNT(*) - 1
FROM CONTRACT_ITEM
@@ -669,19 +737,35 @@
AND result_cd = #{result_cd}
</if>
<if test="receipt_start_date != null and !''.equals(receipt_start_date)">
AND TO_DATE(RECEIPT_DATE,'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{receipt_start_date}, 'YYYY-MM-DD')
</if>
<if test="receipt_end_date != null and !''.equals(receipt_end_date)">
AND TO_DATE(RECEIPT_DATE,'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{receipt_end_date}, 'YYYY-MM-DD')
</if>
<if test="receipt_start_date != null and !''.equals(receipt_start_date)">
AND RECEIPT_DATE IS NOT NULL
AND RECEIPT_DATE != ''
AND (
CASE
WHEN RECEIPT_DATE ~ '^\d{8}$' THEN TO_DATE(RECEIPT_DATE, 'YYYYMMDD')
WHEN RECEIPT_DATE ~ '^\d{4}-\d{2}-\d{2}$' THEN TO_DATE(RECEIPT_DATE, 'YYYY-MM-DD')
ELSE NULL
END
) <![CDATA[ >= ]]> TO_DATE(#{receipt_start_date}, 'YYYY-MM-DD')
</if>
<if test="receipt_end_date != null and !''.equals(receipt_end_date)">
AND RECEIPT_DATE IS NOT NULL
AND RECEIPT_DATE != ''
AND (
CASE
WHEN RECEIPT_DATE ~ '^\d{8}$' THEN TO_DATE(RECEIPT_DATE, 'YYYYMMDD')
WHEN RECEIPT_DATE ~ '^\d{4}-\d{2}-\d{2}$' THEN TO_DATE(RECEIPT_DATE, 'YYYY-MM-DD')
ELSE NULL
END
) <![CDATA[ <= ]]> TO_DATE(#{receipt_end_date}, 'YYYY-MM-DD')
</if>
<if test="due_start_date != null and !''.equals(due_start_date)">
AND TO_DATE(RECEIPT_DATE,'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{due_start_date}, 'YYYY-MM-DD')
</if>
<if test="due_end_date != null and !''.equals(due_end_date)">
AND TO_DATE(DUE_DATE,'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{due_end_date}, 'YYYY-MM-DD')
</if>
<if test="due_start_date != null and !''.equals(due_start_date)">
AND TO_DATE(DUE_DATE,'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{due_start_date}, 'YYYY-MM-DD')
</if>
<if test="due_end_date != null and !''.equals(due_end_date)">
AND TO_DATE(DUE_DATE,'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{due_end_date}, 'YYYY-MM-DD')
</if>
<if test="pm_user_id !=null and pm_user_id !=''">
AND pm_user_id = #{pm_user_id}
@@ -781,6 +865,29 @@
AND UPPER(PO_NO) LIKE UPPER('%${search_poNo}%')
</if>
<if test="receipt_start_date != null and !''.equals(receipt_start_date)">
AND RECEIPT_DATE IS NOT NULL
AND RECEIPT_DATE != ''
AND (
CASE
WHEN RECEIPT_DATE ~ '^\d{8}$' THEN TO_DATE(RECEIPT_DATE, 'YYYYMMDD')
WHEN RECEIPT_DATE ~ '^\d{4}-\d{2}-\d{2}$' THEN TO_DATE(RECEIPT_DATE, 'YYYY-MM-DD')
ELSE NULL
END
) <![CDATA[ >= ]]> TO_DATE(#{receipt_start_date}, 'YYYY-MM-DD')
</if>
<if test="receipt_end_date != null and !''.equals(receipt_end_date)">
AND RECEIPT_DATE IS NOT NULL
AND RECEIPT_DATE != ''
AND (
CASE
WHEN RECEIPT_DATE ~ '^\d{8}$' THEN TO_DATE(RECEIPT_DATE, 'YYYYMMDD')
WHEN RECEIPT_DATE ~ '^\d{4}-\d{2}-\d{2}$' THEN TO_DATE(RECEIPT_DATE, 'YYYY-MM-DD')
ELSE NULL
END
) <![CDATA[ <= ]]> TO_DATE(#{receipt_end_date}, 'YYYY-MM-DD')
</if>
<if test="order_start_date != null and !''.equals(order_start_date)">
AND TO_DATE(ORDER_DATE,'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{order_start_date}, 'YYYY-MM-DD')
</if>