11.상품혜택생성(TB_GOODS_BENEFIT).sql 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309
  1. TRUNCATE TABLE TB_GOODS_BENEFIT_TMP;
  2. -- 쿠폰할인상품 생성
  3. INSERT INTO TB_GOODS_BENEFIT_TMP (
  4. GOODS_CD
  5. , BENEFIT_GB
  6. )
  7. SELECT G.GOODS_CD
  8. , '10' AS BENEFIT_GB /*쿠폰할인*/
  9. FROM TB_GOODS G
  10. , TB_COUPON CP
  11. WHERE CP.SITE_CD = 'G000_10' /*전시사이트*/
  12. AND CP.CPN_STAT = 'G232_11' /*쿠폰인 진행중인 쿠폰만*/
  13. AND CP.DOWN_ABL_YN = 'Y' /*상품상세 다운로드 가능여부*/
  14. AND NOW() <= IF(CP.PD_GB = 'D',DATE_FORMAT(DATE_ADD(NOW(),INTERVAL 1 DAY),'%Y-%m-%d %H:%i:%S'),CP.AVAIL_EDDT)
  15. AND NOW() BETWEEN CP.DOWN_STDT AND CP.DOWN_EDDT
  16. AND CP.CPN_TYPE IN ('G230_11','G230_20','G230_30') /*상품쿠폰,주문서쿠폰,배송비쿠폰*/
  17. AND (SELECT COUNT(1)
  18. FROM TB_COUPON_CUST_GBN
  19. WHERE CPN_ID = CP.CPN_ID
  20. AND USABLE_CUST_GB IN ('G100_10') /*사용가능고객구분:일반*/
  21. ) >= 1
  22. AND CP.BUY_LIMIT_AMT <= G.CURR_PRICE /*최소주문금액*/
  23. AND CP.DC_PVAL > 0
  24. AND IF(CP.TOT_PUB_LIMIT_QTY = 0,9999999999,CP.TOT_PUB_LIMIT_QTY) > (SELECT COUNT(1)
  25. FROM TB_CUST_COUPON
  26. WHERE CPN_ID = CP.CPN_ID
  27. ) /*총발행제한수*/
  28. AND (
  29. (CP.APPLY_SCOPE = 'A' )
  30. OR /* 적용대상:상품*/
  31. (CP.APPLY_SCOPE = 'I' AND (SELECT COUNT(1)
  32. FROM TB_COUPON_REFVAL
  33. WHERE CPN_ID = CP.CPN_ID
  34. AND CPN_TARGET = 'G260_10'
  35. AND DEL_YN = 'N'
  36. AND REF_VAL = G.GOODS_CD
  37. ) > 0
  38. )
  39. OR /* 적용대상:카테고리*/
  40. (CP.APPLY_SCOPE = 'I' AND (SELECT COUNT(1)
  41. FROM TB_COUPON_REFVAL
  42. WHERE CPN_ID = CP.CPN_ID
  43. AND CPN_TARGET = 'G260_11'
  44. AND DEL_YN = 'N'
  45. AND IFNULL(REF_FORMAL_GB,G.FORMAL_GB) = G.FORMAL_GB
  46. AND IFNULL(REF_BRAND_CD,G.BRAND_CD) = G.BRAND_CD
  47. AND REF_VAL IN (SELECT DISTINCT
  48. X.CATE_NO
  49. FROM (
  50. SELECT LEAF_CATE_NO
  51. , CATE_LVL
  52. , CATE_NO
  53. FROM (
  54. SELECT LEAF_CATE_NO
  55. , CASE WHEN X = 1 THEN 'CATE1_NO' /*컬럼과 매핑(컬럼명)*/
  56. WHEN X = 2 THEN 'CATE2_NO'
  57. WHEN X = 3 THEN 'CATE3_NO'
  58. WHEN X = 4 THEN 'CATE4_NO'
  59. ELSE 'CATE5_NO'
  60. END AS CATE_LVL
  61. , CASE WHEN X = 1 THEN CATE1_NO /*컬럼과 매핑(컬럼 데이터)*/
  62. WHEN X = 2 THEN CATE2_NO
  63. WHEN X = 3 THEN CATE3_NO
  64. WHEN X = 4 THEN CATE4_NO
  65. ELSE CATE5_NO
  66. END AS CATE_NO
  67. FROM (SELECT LEAF_CATE_NO
  68. , CATE1_NO
  69. , CATE2_NO
  70. , CATE3_NO
  71. , CATE4_NO
  72. , CATE5_NO
  73. FROM TB_CATE_4SRCH
  74. WHERE SITE_CD = 'G000_10'
  75. AND CATE_TYPE = 'G031_10'
  76. ) A
  77. , (
  78. -- UNPIVOT 컬럼 수 만큼 선언
  79. SELECT 1 AS X
  80. UNION ALL SELECT 2 AS X
  81. UNION ALL SELECT 3 AS X
  82. UNION ALL SELECT 4 AS X
  83. UNION ALL SELECT 5 AS X
  84. ) B
  85. ORDER BY LEAF_CATE_NO, CATE_LVL
  86. ) K
  87. WHERE CATE_NO IS NOT NULL
  88. ) X
  89. , (
  90. SELECT A.CATE_NO
  91. , A.GOODS_CD
  92. FROM TB_CATE_GOODS A
  93. WHERE GOODS_CD = G.GOODS_CD
  94. ) Y
  95. WHERE X.LEAF_CATE_NO = Y.CATE_NO
  96. )
  97. ) >0
  98. )
  99. OR /* 적용대상:브랜드*/
  100. (CP.APPLY_SCOPE = 'I' AND (SELECT COUNT(1)
  101. FROM TB_COUPON_REFVAL
  102. WHERE CPN_ID = CP.CPN_ID
  103. AND CPN_TARGET = 'G260_12'
  104. AND DEL_YN = 'N'
  105. AND REF_VAL = G.BRAND_CD
  106. AND IFNULL(REF_FORMAL_GB,G.FORMAL_GB) = G.FORMAL_GB
  107. ) >0
  108. )
  109. OR /* 적용대상:공급업체*/
  110. (CP.APPLY_SCOPE = 'I' AND (SELECT COUNT(1)
  111. FROM TB_COUPON_REFVAL
  112. WHERE CPN_ID = CP.CPN_ID
  113. AND CPN_TARGET = 'G260_13'
  114. AND DEL_YN = 'N'
  115. AND REF_VAL = G.SUPPLY_COMP_CD
  116. ) >0
  117. )
  118. )
  119. AND NOT EXISTS (SELECT 1
  120. FROM TB_COUPON_REFVAL SCPR
  121. WHERE SCPR.CPN_ID = CP.CPN_ID
  122. AND SCPR.REF_VAL = G.GOODS_CD
  123. AND SCPR.DEL_YN = 'N' /*삭제안된넘*/
  124. AND SCPR.CPN_TARGET = 'G260_14' /* 제외상품*/
  125. )
  126. AND NOT EXISTS (SELECT 1
  127. FROM TB_COUPON_BAN_GOODS
  128. WHERE GOODS_CD = G.GOODS_CD
  129. AND DEL_YN = 'N'
  130. )
  131. AND NOT EXISTS (
  132. SELECT 1
  133. FROM TB_RANDOM_COUPON RC
  134. WHERE 1=1
  135. AND RC.CPN_ID = CP.CPN_ID
  136. )
  137. AND NOT EXISTS (
  138. SELECT 1
  139. FROM TB_FIRST_COME_COUPON FCC
  140. WHERE 1=1
  141. AND FCC.CPN_ID = CP.CPN_ID
  142. )
  143. GROUP BY G.GOODS_CD
  144. HAVING COUNT(*) > 0
  145. ;
  146. -- 상품혜택임시 - 무료배송상품 생성
  147. INSERT INTO TB_GOODS_BENEFIT_TMP (
  148. GOODS_CD
  149. , BENEFIT_GB
  150. )
  151. SELECT GOODS_CD
  152. , '20' AS BENEFIT_GB /*무료배송*/
  153. FROM (
  154. SELECT G.GOODS_CD
  155. , DFP.MIN_ORD_AMT
  156. , FN_GET_BENEFIT_PRICE('P',G.GOODS_CD,G.CURR_PRICE,'G100_10') AS CURR_PRICE
  157. FROM TB_GOODS G
  158. , TB_GOODS_STOCK GS
  159. , TB_DELV_FEE_POLICY DFP
  160. WHERE G.GOODS_CD = GS.GOODS_CD
  161. AND G.DELV_FEE_CD = DFP.DELV_FEE_CD
  162. AND G.GOODS_STAT = 'G008_90' /*승인완료상품*/
  163. AND G.SELF_MALL_YN = 'Y' /*몰노출상품*/
  164. AND NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT /*판매기간*/
  165. AND GS.STOCK_QTY > 0 /*재고있는상품*/
  166. AND DFP.USE_YN = 'Y' /*사용하는배송비정책*/
  167. ) Z
  168. WHERE MIN_ORD_AMT <= CURR_PRICE
  169. ;
  170. -- 상품혜택임시 - 사은품상품 생성
  171. INSERT INTO TB_GOODS_BENEFIT_TMP (
  172. GOODS_CD
  173. , BENEFIT_GB
  174. )
  175. SELECT GOODS_CD
  176. , '30' AS BENEFIT_GB
  177. FROM (
  178. SELECT G.GOODS_CD
  179. FROM TB_FREEGIFT F
  180. INNER JOIN TB_FREEGIFT_SECTION FS
  181. ON F.FREEGIFT_SQ = FS.FREEGIFT_SQ
  182. INNER JOIN TB_FREEGIFT_GOODS FGA
  183. ON F.FREEGIFT_SQ = FGA.FREEGIFT_SQ
  184. AND FGA.GOODS_GB = 'G800_20'
  185. AND FGA.TARGET_GB = 'G260_10'
  186. INNER JOIN TB_FREEGIFT_VAL FGV
  187. ON F.FREEGIFT_SQ = FGV.FREEGIFT_SQ
  188. AND FGV.DEL_YN = 'N'
  189. AND FGV.LEFT_QTY - FGV.ITEM_QTY > 0
  190. INNER JOIN TB_GOODS G
  191. ON FGA.TARGET_VAL = G.GOODS_CD
  192. LEFT OUTER JOIN TB_FREEGIFT_GOODS NOT_APPLY
  193. ON F.FREEGIFT_SQ = NOT_APPLY.FREEGIFT_SQ
  194. AND G.GOODS_CD = NOT_APPLY.TARGET_VAL
  195. AND NOT_APPLY.GOODS_GB = 'G800_30'
  196. AND NOT_APPLY.TARGET_GB = 'G260_10'
  197. WHERE NOT_APPLY.TARGET_VAL IS NULL
  198. AND F.DEL_YN = 'N'
  199. AND FS.DEL_YN = 'N'
  200. AND FGA.DEL_YN = 'N'
  201. AND NOW() BETWEEN F.FREEGIFT_STDT AND F.FREEGIFT_EDDT
  202. AND F.SELF_YN = 'Y'
  203. AND F.FREEGIFT_STAT = 'G232_11'
  204. GROUP BY G.GOODS_CD
  205. HAVING COUNT(*) > 0
  206. UNION ALL
  207. SELECT G.GOODS_CD
  208. FROM TB_FREEGIFT F
  209. INNER JOIN TB_FREEGIFT_SECTION FS
  210. ON F.FREEGIFT_SQ = FS.FREEGIFT_SQ
  211. INNER JOIN TB_FREEGIFT_GOODS_APPLY BRAND_FGA
  212. ON F.FREEGIFT_SQ = BRAND_FGA.FREEGIFT_SQ
  213. AND BRAND_FGA.TARGET_GB = 'G260_12' /*브랜드*/
  214. INNER JOIN TB_FREEGIFT_GOODS_APPLY COMPANY_FGA
  215. ON F.FREEGIFT_SQ = COMPANY_FGA.FREEGIFT_SQ
  216. AND COMPANY_FGA.TARGET_GB = 'G260_13' /*업체*/
  217. INNER JOIN TB_FREEGIFT_VAL FGV
  218. ON F.FREEGIFT_SQ = FGV.FREEGIFT_SQ
  219. AND FGV.DEL_YN = 'N'
  220. AND FGV.LEFT_QTY - FGV.ITEM_QTY > 0
  221. INNER JOIN TB_GOODS G
  222. ON BRAND_FGA.TARGET_VAL = G.BRAND_CD
  223. AND COMPANY_FGA.TARGET_VAL = G.SUPPLY_COMP_CD
  224. LEFT OUTER JOIN TB_FREEGIFT_GOODS NOT_APPLY
  225. ON F.FREEGIFT_SQ = NOT_APPLY.FREEGIFT_SQ
  226. AND G.GOODS_CD = NOT_APPLY.TARGET_VAL
  227. AND NOT_APPLY.GOODS_GB = 'G800_30'
  228. WHERE NOT_APPLY.TARGET_VAL IS NULL
  229. AND F.DEL_YN = 'N'
  230. AND FS.DEL_YN = 'N'
  231. AND NOW() BETWEEN F.FREEGIFT_STDT AND F.FREEGIFT_EDDT
  232. AND F.SELF_YN = 'Y'
  233. AND F.FREEGIFT_STAT = 'G232_11'
  234. GROUP BY G.GOODS_CD
  235. HAVING COUNT(*) > 0
  236. ) Z
  237. GROUP BY GOODS_CD
  238. ;
  239. -- 상품혜택임시 - 신상상품 생성
  240. INSERT INTO TB_GOODS_BENEFIT_TMP (
  241. GOODS_CD
  242. , BENEFIT_GB
  243. )
  244. SELECT G.GOODS_CD
  245. , '40' AS BENEFIT_GB /*신상*/
  246. FROM TB_GOODS G
  247. , TB_GOODS_STOCK GS
  248. WHERE G.GOODS_CD = GS.GOODS_CD
  249. AND G.GOODS_STAT = 'G008_90' /*승인완료상품*/
  250. AND G.SELF_MALL_YN = 'Y' /*몰노출상품*/
  251. AND NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT /*판매기간*/
  252. AND GS.STOCK_QTY > 0 /*재고있는상품*/
  253. AND G.FORMAL_GB = 'G009_10' /*정상상품(=신상)*/
  254. ;
  255. -- 상품혜택임시 - 총알배송 생성
  256. INSERT INTO TB_GOODS_BENEFIT_TMP (
  257. GOODS_CD
  258. , BENEFIT_GB
  259. )
  260. SELECT G.GOODS_CD
  261. , '50' AS BENEFIT_GB /*총알배송*/
  262. FROM TB_GOODS G
  263. , TB_GOODS_STOCK GS
  264. WHERE G.GOODS_CD = GS.GOODS_CD
  265. AND G.GOODS_STAT = 'G008_90' /*승인완료상품*/
  266. AND G.SELF_MALL_YN = 'Y' /*몰노출상품*/
  267. AND NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT /*판매기간*/
  268. AND G.SELF_GOODS_YN = 'Y' /*자사상품만*/
  269. AND GS.STOCK_QTY > 0 /*재고있는상품*/
  270. AND NOT EXISTS (SELECT 1
  271. FROM TB_GOODS_SHOT_DELV_SKIP
  272. WHERE GOODS_CD = G.GOODS_CD
  273. )
  274. ;
  275. -- 상품혜택 삭제
  276. TRUNCATE TABLE TB_GOODS_BENEFIT;
  277. -- 상품혜택 생성
  278. INSERT INTO TB_GOODS_BENEFIT (
  279. GOODS_CD
  280. , BENEFIT_GB
  281. , REG_NO
  282. , REG_DT
  283. )
  284. SELECT DISTINCT
  285. GOODS_CD
  286. , BENEFIT_GB
  287. , 0 AS REG_NO
  288. , NOW() AS REG_DT
  289. FROM (
  290. SELECT GOODS_CD
  291. , BENEFIT_GB
  292. FROM TB_GOODS_BENEFIT_TMP
  293. UNION ALL
  294. SELECT GC.GOODS_CD
  295. , G.BENEFIT_GB
  296. FROM TB_GOODS_BENEFIT_TMP G
  297. , TB_GOODS_COMPOSE GC
  298. WHERE G.GOODS_CD = GC.COMPS_GOODS_CD
  299. ) Z
  300. ;