Bladeren bron

1.优化大中型统计报表-房地产总台账SQL

GouGengquan 1 maand geleden
bovenliggende
commit
a95a0ac0c2
1 gewijzigde bestanden met toevoegingen van 20 en 13 verwijderingen
  1. 20 13
      dao/src/main/resources/mapper/MajorStatisticalStatementMapper.xml

+ 20 - 13
dao/src/main/resources/mapper/MajorStatisticalStatementMapper.xml

@@ -3,11 +3,15 @@
 <mapper namespace="com.dayou.mapper.MajorStatisticalStatementMapper">
 
     <sql id="majorLedgerQuery">
-        SELECT (@i := @i + 1)                            AS id,
+        SELECT (@i := @i + 1)                                   AS id,
         major.order_id                                   AS orderId,
         pro.id                                           AS productionId,
         pro.report_no                                    AS reportNo,
-        (CASE WHEN pro.production = 'LETTER' THEN '复评函' WHEN pro.production = 'REPORT' THEN '报告' WHEN pro.production = 'STATEMENT' THEN '意见书' ELSE '-' END) AS productionType,
+        (CASE
+        WHEN pro.production = 'LETTER' THEN '复评函'
+        WHEN pro.production = 'REPORT' THEN '报告'
+        WHEN pro.production = 'STATEMENT' THEN '意见书'
+        ELSE '-' END)                               AS productionType,
         department.name                                  AS departmentName,
         major.name                                       AS projectName,
         customer.name                                    AS customerName,
@@ -21,11 +25,11 @@
         major.bailor_address                             AS bailorAddress,
         major.evaluate_aim                               AS evaluateAim,
         pro.value_timing                                 AS valueTiming,
-        GROUP_CONCAT(target.located SEPARATOR ';')       AS located,
-        GROUP_CONCAT(target.land_use SEPARATOR ';')      AS landUse,
-        GROUP_CONCAT(target.build_acreage SEPARATOR ';') AS buildAcreage,
-        GROUP_CONCAT(target.land_acreage SEPARATOR ';')  AS landAcreage,
-        GROUP_CONCAT(DATE(target.created) SEPARATOR ';') AS reconnaissanceDate,
+        GROUP_CONCAT(COALESCE(letter_target.located, report_target.located, statement_target.located) SEPARATOR ';')       AS located,
+        GROUP_CONCAT(COALESCE(letter_target.land_use, report_target.land_use, statement_target.land_use) SEPARATOR ';')      AS landUse,
+        GROUP_CONCAT(COALESCE(letter_target.build_acreage, report_target.build_acreage, statement_target.build_acreage) SEPARATOR ';') AS buildAcreage,
+        GROUP_CONCAT(COALESCE(letter_target.land_acreage, report_target.land_acreage, statement_target.land_acreage) SEPARATOR ';')  AS landAcreage,
+        GROUP_CONCAT(COALESCE(DATE(letter_target.created), DATE(report_target.created), DATE(statement_target.created)) SEPARATOR ';') AS reconnaissanceDate,
         pro.evaluate_price                               AS evaluatePrice,
         pro.evaluate_amount                              AS evaluateAmount,
         fund.real_amount                                 AS productionRealAmount,
@@ -38,12 +42,15 @@
         LEFT JOIN major_production AS pro
         ON pro.major_id = major.id AND pro.deleted = 0
         # 连接查询产品对应的评估对象, 不同产品类型连接字段不一样
-        LEFT JOIN major_target AS target ON CASE
-        WHEN pro.production = 'LETTER' THEN pro.report_no = target.letter_no
-        WHEN pro.production = 'REPORT' THEN pro.report_no = target.report_no
-        WHEN pro.production = 'STATEMENT' THEN pro.report_no = target.statement_no
-        ELSE FALSE
-        END
+        LEFT JOIN major_target AS letter_target
+        ON pro.production = 'LETTER'
+        AND pro.report_no = letter_target.letter_no
+        LEFT JOIN major_target AS report_target
+        ON pro.production = 'REPORT'
+        AND pro.report_no = report_target.report_no
+        LEFT JOIN major_target AS statement_target
+        ON pro.production = 'STATEMENT'
+        AND pro.report_no = statement_target.statement_no
         LEFT JOIN production_fund AS fund ON fund.production_no = pro.report_no
         LEFT JOIN user AS manager ON manager.id = major.client_manager_id
         LEFT JOIN user AS principal ON principal.id = major.principal_id