마이페이지_쿠폰목록.sql 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. -- 마이페이지 > 쿠폰 목록
  2. WITH TAB_COUPON AS (
  3. SELECT CC.CPN_ID /*쿠폰ID*/
  4. , C.CPN_NM /*쿠폰명*/
  5. , C.BUY_LIMIT_AMT /*구매제한금액*/
  6. , C.MAX_DC_AMT /*최대할인금액*/
  7. , CASE WHEN #{frontGb} = 'P' THEN C.DC_PVAL
  8. WHEN #{frontGb} = 'M' THEN C.DC_MVAL
  9. WHEN #{frontGb} = 'A' THEN C.DC_AVAL
  10. END AS DC_VAL /*할인값*/
  11. , CASE WHEN C.DC_WAY = 'G240_10' THEN '원'
  12. ELSE '%'
  13. END AS DC_WAY /*할인방법*/
  14. , CONCAT(CASE WHEN C.BUY_LIMIT_AMT = 0 THEN ''
  15. ELSE CONCAT(C.BUY_LIMIT_AMT,'원 이상 구매 시 ')
  16. END
  17. ,CASE WHEN C.MAX_DC_AMT = 0 THEN ''
  18. ELSE CONCAT('최대 ',C.MAX_DC_AMT,'원 할인')
  19. END) AS USE_CONDITION /*사용조건*/
  20. , CASE WHEN C.CUST_PUB_LIMIT_QTY = 0 THEN ''
  21. ELSE CONCAT('1인당 최대',C.CUST_PUB_LIMIT_QTY,'매')
  22. END AS ISSUE_CONDITION /*발급조건*/
  23. , CC.AVAIL_STDT /*유효시작일자*/
  24. , CC.AVAIL_EDDT /*유효종료일자*/
  25. , CC.CPN_CNT /*보유쿠폰수*/
  26. , CC.EXPIRE_YN /*만료여부*/
  27. FROM (
  28. SELECT CC.CPN_ID
  29. , DATE_FORMAT(CC.AVAIL_STDT,'%Y.%m.%d %H:%i') AS AVAIL_STDT /*유효시작일자*/
  30. , DATE_FORMAT(CC.AVAIL_EDDT,'%Y.%m.%d %H:%i') AS AVAIL_EDDT /*유효종료일자*/
  31. , COUNT(*) AS CPN_CNT /*보유쿠폰수*/
  32. , MAX(CASE WHEN NOW() > CC.AVAIL_EDDT THEN 'Y'
  33. ELSE 'N'
  34. END) AS EXPIRE_YN /*만료여부*/
  35. FROM TB_CUST_COUPON CC
  36. WHERE 1 = 1
  37. AND CC.CUST_NO = #{custNo}
  38. AND CC.USED_DT IS NULL /*사용하지않은쿠폰만*/
  39. AND CC.AVAIL_EDDT >= DATE_ADD(NOW(), INTERVAL -3 MONTH) /*최근3개월쿠폰만*/
  40. GROUP BY CC.CPN_ID, DATE_FORMAT(CC.AVAIL_STDT,'%Y.%m.%d %H:%i'), DATE_FORMAT(CC.AVAIL_EDDT,'%Y.%m.%d %H:%i')
  41. ) CC
  42. , TB_COUPON C
  43. WHERE CC.CPN_ID = C.CPN_ID
  44. AND C.CPN_STAT = 'G232_11' /*진행중인쿠폰*/
  45. AND C.SITE_CD = #{siteCd}
  46. )
  47. , TAB_COUPON_REFVAL1 AS (
  48. SELECT CR.CPN_ID
  49. , CR.CPN_TARGET
  50. , CASE WHEN CR.CPN_TARGET = 'G260_10' /*상품*/ THEN (SELECT GOODS_NM FROM TB_GOODS WHERE GOODS_CD = CR.REF_VAL AND GOODS_STAT = 'G008_90')
  51. WHEN CR.CPN_TARGET = 'G260_11' /*카테고리*/ THEN
  52. CASE WHEN IFNULL((SELECT COUNT(1) FROM TB_CATE_4SRCH WHERE CATE1_NO = CR.REF_VAL),0) > 0 THEN (SELECT CATE1_NM FROM TB_CATE_4SRCH WHERE CATE1_NO = CR.REF_VAL LIMIT 1)
  53. WHEN IFNULL((SELECT COUNT(1) FROM TB_CATE_4SRCH WHERE CATE2_NO = CR.REF_VAL),0) > 0 THEN (SELECT CONCAT(CATE1_NM,' > ',CATE2_NM) FROM TB_CATE_4SRCH WHERE CATE2_NO = CR.REF_VAL LIMIT 1)
  54. WHEN IFNULL((SELECT COUNT(1) FROM TB_CATE_4SRCH WHERE CATE3_NO = CR.REF_VAL),0) > 0 THEN (SELECT CONCAT(CATE1_NM,' > ',CATE2_NM) FROM TB_CATE_4SRCH WHERE CATE3_NO = CR.REF_VAL LIMIT 1)
  55. WHEN IFNULL((SELECT COUNT(1) FROM TB_CATE_4SRCH WHERE CATE4_NO = CR.REF_VAL),0) > 0 THEN (SELECT CONCAT(CATE1_NM,' > ',CATE2_NM) FROM TB_CATE_4SRCH WHERE CATE4_NO = CR.REF_VAL LIMIT 1)
  56. END
  57. WHEN CR.CPN_TARGET = 'G260_12' /*브랜드*/ THEN (SELECT BRAND_KNM FROM TB_BRAND WHERE BRAND_CD = CR.REF_VAL AND USE_YN = 'Y')
  58. WHEN CR.CPN_TARGET = 'G260_13' /*업체*/ THEN (SELECT SUPPLY_COMP_NM FROM TB_SUPPLY_COMPANY WHERE SUPPLY_COMP_CD = CR.REF_VAL AND USE_YN = 'Y' AND SUPPLY_STAT = 'G010_30')
  59. END AS REF_VAL
  60. , RANK() OVER(PARTITION BY CR.CPN_ID, CR.CPN_TARGET ORDER BY REF_VAL) AS RK
  61. FROM TAB_COUPON C
  62. , TB_COUPON_REFVAL CR
  63. WHERE C.CPN_ID = CR.CPN_ID
  64. AND CR.CPN_TARGET != 'G260_14' /*제외상품아닌넘*/
  65. )
  66. , TAB_COUPON_REFVAL2 AS (
  67. SELECT CPN_ID
  68. , CPN_TARGET
  69. , GROUP_CONCAT(REF_VAL ORDER BY RK ASC SEPARATOR '/' ) AS REF_VAL
  70. , (SELECT COUNT(*)
  71. FROM TAB_COUPON_REFVAL1
  72. WHERE CPN_ID = CR.CPN_ID
  73. AND CPN_TARGET = CR.CPN_TARGET) AS CNT
  74. FROM TAB_COUPON_REFVAL1 CR
  75. WHERE 1 = 1
  76. AND (
  77. (CPN_TARGET != 'G260_12' AND RK = 1) /*브랜드 외는 1개만 노출*/
  78. OR
  79. (CPN_TARGET = 'G260_12' AND RK <= 2) /*브랜드만 2개 노출*/
  80. )
  81. GROUP BY CPN_ID, CPN_TARGET
  82. )
  83. SELECT C.CPN_ID /*쿠폰ID*/
  84. , C.CPN_NM /*쿠폰명*/
  85. , C.BUY_LIMIT_AMT /*구매제한금액*/
  86. , C.MAX_DC_AMT /*최대할인금액*/
  87. , C.DC_VAL /*할인값*/
  88. , C.DC_WAY /*할인방법*/
  89. , C.USE_CONDITION /*사용조건*/
  90. , C.ISSUE_CONDITION /*발급조건*/
  91. , C.AVAIL_STDT /*유효시작일자*/
  92. , C.AVAIL_EDDT /*유효종료일자*/
  93. , C.CPN_CNT /*보유쿠폰수*/
  94. , C.EXPIRE_YN /*만료여부*/
  95. , CONCAT(CR.REF_VAL,CASE WHEN CR.CPN_TARGET = 'G260_10' AND CR.CNT > 1 THEN ' 외'
  96. WHEN CR.CPN_TARGET = 'G260_11' AND CR.CNT > 1 THEN ' 외'
  97. WHEN CR.CPN_TARGET = 'G260_12' AND CR.CNT > 2 THEN ' 외'
  98. WHEN CR.CPN_TARGET = 'G260_13' AND CR.CNT > 1 THEN ' 외'
  99. ELSE ''
  100. END) AS TGT_CONDITION /*대상조건*/
  101. FROM TAB_COUPON C
  102. , TAB_COUPON_REFVAL2 CR
  103. WHERE C.CPN_ID = CR.CPN_ID
  104. ORDER BY C.EXPIRE_YN, C.AVAIL_EDDT
  105. ;