상품리스트_쿼리문.sql 53 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130
  1. -- 브랜드 *
  2. -- 사이즈 *
  3. -- 가격 *
  4. -- 할인율 *
  5. -- 연령 *
  6. -- 시즌 *
  7. -- 컬러 *
  8. -- 혜택
  9. -- 필터-브랜드 (getFilterBrandList)
  10. SELECT BG.BRAND_GROUP_NO /*브랜드그룹번호*/
  11. , CASE WHEN BG.DISP_NM_LANG = 'EN' THEN
  12. BG.BRAND_GROUP_ENM
  13. ELSE
  14. BG.BRAND_GROUP_KNM
  15. END AS BRAND_GROUP_NM /*브랜드그룹명*/
  16. FROM TB_BRAND_GROUP BG
  17. WHERE BRAND_GROUP_NO IN (SELECT B.BRAND_GROUP_NO
  18. FROM TB_CATE_4SRCH C4
  19. , TB_CATE_GOODS CG
  20. , TB_GOODS G
  21. , TB_GOODS_STOCK GS
  22. , TB_BRAND B
  23. , TB_SITE_BRAND SB
  24. WHERE C4.LEAF_CATE_NO = CG.CATE_NO
  25. <choose>
  26. <when test="brandGroupNo != null and brandGroupNo != ''">
  27. AND CG.BRAND_GROUP_NO = #{brandGroupNo}
  28. </when>
  29. <otherwise>
  30. AND CG.BRAND_GROUP_NO = 0 /*브랜드메인에서 접근한 것이 아니면*/
  31. </otherwise>
  32. </choose>
  33. AND CG.GOODS_CD = G.GOODS_CD
  34. AND G.GOODS_CD = GS.GOODS_CD
  35. AND G.BRAND_CD = B.BRAND_CD
  36. AND B.BRAND_CD = SB.BRAND_CD
  37. AND C4.SITE_CD = #{siteCd}
  38. AND C4.CATE_GB = #{cateGb}
  39. AND C4.CATE_TYPE = 'G031_10' /*상품카테고리*/
  40. AND C4.CATE1_NO = #{cate1No}
  41. <if test="cate2No != null and cate2No != ''">
  42. AND C4.CATE2_NO = #{cate2No}
  43. </if>
  44. <if test="cate3No != null and cate3No != ''">
  45. AND C4.CATE3_NO = #{cate3No}
  46. </if>
  47. <if test="cate4No != null and cate4No != ''">
  48. AND C4.CATE4_NO = #{cate4No}
  49. </if>
  50. <if test="cate5No != null and cate5No != ''">
  51. AND C4.CATE5_NO = #{cate5No}
  52. </if>
  53. AND G.GOODS_STAT = 'G008_90' /*승인완료상품*/
  54. AND G.SELF_MALL_YN = 'Y' /*몰노출상품*/
  55. AND NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT /*판매기간*/
  56. AND GS.STOCK_QTY <![CDATA[>]]> 0 /*재고있는상품*/
  57. AND SB.SITE_CD = #{siteCd}
  58. AND SB.USE_YN = 'Y' /*사이트에서 사용하는 브랜드*/
  59. AND B.USE_YN = 'Y' /*사용하는 브랜드*/
  60. )
  61. WHERE BG.USE_YN = 'Y' /*사용하는 브랜드그룹*/
  62. ORDER BY 2
  63. ;
  64. -- 필터 - 사이즈 (getFilterSizeList)
  65. SELECT DISTINCT
  66. I.SIZE_GB /*사이즈구분(T:상의, B:하의, S:신발)*/
  67. , S.OPT_CD2 /*옵션코드2*/
  68. FROM TB_CATE_4SRCH C4
  69. , TB_CATE_GOODS CG
  70. , TB_GOODS G
  71. , TB_ITEMKIND I
  72. , VW_STOCK S
  73. , TB_BRAND B
  74. , TB_SITE_BRAND SB
  75. WHERE C4.LEAF_CATE_NO = CG.CATE_NO
  76. <choose>
  77. <when test="brandGroupNo != null and brandGroupNo != ''">
  78. AND CG.BRAND_GROUP_NO = #{brandGroupNo}
  79. </when>
  80. <otherwise>
  81. AND CG.BRAND_GROUP_NO = 0 /*브랜드메인에서 접근한 것이 아니면*/
  82. </otherwise>
  83. </choose>
  84. AND CG.GOODS_CD = G.GOODS_CD
  85. AND G.ITEMKIND_CD = I.ITEMKIND_CD
  86. AND G.GOODS_CD = S.GOODS_CD
  87. AND G.BRAND_CD = B.BRAND_CD
  88. AND B.BRAND_CD = SB.BRAND_CD
  89. AND C4.SITE_CD = #{siteCd}
  90. AND C4.CATE_GB = #{cateGb}
  91. AND C4.CATE_TYPE = 'G031_10' /*상품카테고리*/
  92. AND C4.CATE1_NO = #{cate1No}
  93. <if test="cate2No != null and cate2No != ''">
  94. AND C4.CATE2_NO = #{cate2No}
  95. </if>
  96. <if test="cate3No != null and cate3No != ''">
  97. AND C4.CATE3_NO = #{cate3No}
  98. </if>
  99. <if test="cate4No != null and cate4No != ''">
  100. AND C4.CATE4_NO = #{cate4No}
  101. </if>
  102. <if test="cate5No != null and cate5No != ''">
  103. AND C4.CATE5_NO = #{cate5No}
  104. </if>
  105. AND G.GOODS_STAT = 'G008_90' /*승인완료상품*/
  106. AND G.SELF_MALL_YN = 'Y' /*몰노출상품*/
  107. AND NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT /*판매기간*/
  108. AND I.SIZE_GB IS NOT NULL
  109. AND S.CURR_STOCK_QTY - S.BASE_STOCK_QTY <![CDATA[>]]> 0 /*재고있는옵션*/
  110. AND S.SOLDOUT_YN = 'N' /*품절이 아닌 옵션*/
  111. AND S.DISP_YN = 'Y' /*노출하는 옵션*/
  112. AND LENGTH(S.OPT_CD2) > 0
  113. AND SB.SITE_CD = #{siteCd}
  114. AND SB.USE_YN = 'Y' /*사이트에서 사용하는 브랜드*/
  115. AND B.USE_YN = 'Y' /*사용하는 브랜드*/
  116. ORDER BY CASE WHEN I.SIZE_GB = 'T' THEN 1
  117. WHEN I.SIZE_GB = 'B' THEN 2
  118. WHEN I.SIZE_GB = 'S' THEN 3
  119. ELSE 4
  120. END, S.OPT_CD2
  121. ;
  122. -- 필터-가격 (getFilterPriceList)
  123. SELECT FLOOR(MIN_CURR_PRICE / 1000) * 1000 AS PRICE1
  124. , FLOOR((MIN_CURR_PRICE + SLICE_VAL * 1) / 1000) * 1000 AS PRICE2
  125. , FLOOR((MIN_CURR_PRICE + SLICE_VAL * 2) / 1000) * 1000 AS PRICE3
  126. , FLOOR((MIN_CURR_PRICE + SLICE_VAL * 3) / 1000) * 1000 AS PRICE4
  127. , FLOOR((MIN_CURR_PRICE + SLICE_VAL * 4) / 1000) * 1000 AS PRICE5
  128. , FLOOR(MAX_CURR_PRICE / 1000) * 1000 AS PRICE6
  129. FROM (
  130. SELECT MIN(CURR_PRICE) AS MIN_CURR_PRICE /*최소현재판매가*/
  131. , MAX(CURR_PRICE) AS MAX_CURR_PRICE /*최대현재판매가*/
  132. , (MAX(CURR_PRICE) - MIN(CURR_PRICE)) / 5 AS SLICE_VAL /*분할값*/
  133. FROM (
  134. SELECT FN_GET_BENEFIT_PRICE(#{frontGb},G.GOODS_CD,G.CURR_PRICE,#{custGb}) AS CURR_PRICE /*현재판매가*/
  135. FROM TB_CATE_4SRCH C4
  136. , TB_CATE_GOODS CG
  137. , TB_GOODS G
  138. , TB_GOODS_STOCK GS
  139. , TB_BRAND B
  140. , TB_SITE_BRAND SB
  141. WHERE C4.LEAF_CATE_NO = CG.CATE_NO
  142. <choose>
  143. <when test="brandGroupNo != null and brandGroupNo != ''">
  144. AND CG.BRAND_GROUP_NO = #{brandGroupNo}
  145. </when>
  146. <otherwise>
  147. AND CG.BRAND_GROUP_NO = 0 /*브랜드메인에서 접근한 것이 아니면*/
  148. </otherwise>
  149. </choose>
  150. AND CG.GOODS_CD = G.GOODS_CD
  151. AND CG.GOODS_CD = GS.GOODS_CD
  152. AND G.BRAND_CD = B.BRAND_CD
  153. AND B.BRAND_CD = SB.BRAND_CD
  154. AND C4.SITE_CD = #{siteCd}
  155. AND C4.CATE_GB = #{cateGb}
  156. AND C4.CATE_TYPE = 'G031_10' /*상품카테고리*/
  157. AND C4.CATE1_NO = #{cate1No}
  158. <if test="cate2No != null and cate2No != ''">
  159. AND C4.CATE2_NO = #{cate2No}
  160. </if>
  161. <if test="cate3No != null and cate3No != ''">
  162. AND C4.CATE3_NO = #{cate3No}
  163. </if>
  164. <if test="cate4No != null and cate4No != ''">
  165. AND C4.CATE4_NO = #{cate4No}
  166. </if>
  167. <if test="cate5No != null and cate5No != ''">
  168. AND C4.CATE5_NO = #{cate5No}
  169. </if>
  170. AND G.GOODS_STAT = 'G008_90' /*승인완료상품*/
  171. AND G.SELF_MALL_YN = 'Y' /*몰노출상품*/
  172. AND NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT /*판매기간*/
  173. AND GS.STOCK_QTY <![CDATA[>]]> 0 /*재고있는상품*/
  174. AND SB.SITE_CD = #{siteCd}
  175. AND SB.USE_YN = 'Y' /*사이트에서 사용하는 브랜드*/
  176. AND B.USE_YN = 'Y' /*사용하는 브랜드*/
  177. ) Z
  178. ) Z
  179. ;
  180. -- 필터-연령대 (getFilterAgesList)
  181. SELECT CD AS AGES_CD /*연령대코드*/
  182. , CD_NM AS AGES_NM /*연령대명*/
  183. FROM TB_COMMON_CODE
  184. WHERE CD_GB = 'G023'
  185. AND CD IN (SELECT G.AGE_GRP_CD
  186. FROM TB_CATE_4SRCH C4
  187. , TB_CATE_GOODS CG
  188. , TB_GOODS G
  189. , TB_GOODS_STOCK GS
  190. , TB_BRAND B
  191. , TB_SITE_BRAND SB
  192. WHERE C4.LEAF_CATE_NO = CG.CATE_NO
  193. <choose>
  194. <when test="brandGroupNo != null and brandGroupNo != ''">
  195. AND CG.BRAND_GROUP_NO = #{brandGroupNo}
  196. </when>
  197. <otherwise>
  198. AND CG.BRAND_GROUP_NO = 0 /*브랜드메인에서 접근한 것이 아니면*/
  199. </otherwise>
  200. </choose>
  201. AND CG.GOODS_CD = G.GOODS_CD
  202. AND CG.GOODS_CD = GS.GOODS_CD
  203. AND G.BRAND_CD = B.BRAND_CD
  204. AND B.BRAND_CD = SB.BRAND_CD
  205. AND C4.SITE_CD = #{siteCd}
  206. AND C4.CATE_GB = #{cateGb}
  207. AND C4.CATE_TYPE = 'G031_10' /*상품카테고리*/
  208. AND C4.CATE1_NO = #{cate1No}
  209. <if test="cate2No != null and cate2No != ''">
  210. AND C4.CATE2_NO = #{cate2No}
  211. </if>
  212. <if test="cate3No != null and cate3No != ''">
  213. AND C4.CATE3_NO = #{cate3No}
  214. </if>
  215. <if test="cate4No != null and cate4No != ''">
  216. AND C4.CATE4_NO = #{cate4No}
  217. </if>
  218. <if test="cate5No != null and cate5No != ''">
  219. AND C4.CATE5_NO = #{cate5No}
  220. </if>
  221. AND G.GOODS_STAT = 'G008_90' /*승인완료상품*/
  222. AND G.SELF_MALL_YN = 'Y' /*몰노출상품*/
  223. AND NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT /*판매기간*/
  224. AND GS.STOCK_QTY <![CDATA[>]]> 0 /*재고있는상품*/
  225. AND SB.SITE_CD = #{siteCd}
  226. AND SB.USE_YN = 'Y' /*사이트에서 사용하는 브랜드*/
  227. AND B.USE_YN = 'Y' /*사용하는 브랜드*/
  228. )
  229. AND USE_YN = 'Y'
  230. ORDER BY DISP_ORD
  231. ;
  232. -- 필터-시즌 (getFilterSeasonList)
  233. SELECT CD AS SEASON_CD /*시즌코드*/
  234. , CD_NM AS SEASON_NM /*시즌명*/
  235. FROM TB_COMMON_CODE
  236. WHERE CD_GB = 'G006'
  237. AND CD IN (SELECT G.SEASON_CD
  238. FROM TB_CATE_4SRCH C4
  239. , TB_CATE_GOODS CG
  240. , TB_GOODS G
  241. , TB_GOODS_STOCK GS
  242. , TB_BRAND B
  243. , TB_SITE_BRAND SB
  244. WHERE C4.LEAF_CATE_NO = CG.CATE_NO
  245. <choose>
  246. <when test="brandGroupNo != null and brandGroupNo != ''">
  247. AND CG.BRAND_GROUP_NO = #{brandGroupNo}
  248. </when>
  249. <otherwise>
  250. AND CG.BRAND_GROUP_NO = 0 /*브랜드메인에서 접근한 것이 아니면*/
  251. </otherwise>
  252. </choose>
  253. AND CG.GOODS_CD = G.GOODS_CD
  254. AND CG.GOODS_CD = GS.GOODS_CD
  255. AND G.BRAND_CD = B.BRAND_CD
  256. AND B.BRAND_CD = SB.BRAND_CD
  257. AND C4.SITE_CD = #{siteCd}
  258. AND C4.CATE_GB = #{cateGb}
  259. AND C4.CATE_TYPE = 'G031_10' /*상품카테고리*/
  260. AND C4.CATE1_NO = #{cate1No}
  261. <if test="cate2No != null and cate2No != ''">
  262. AND C4.CATE2_NO = #{cate2No}
  263. </if>
  264. <if test="cate3No != null and cate3No != ''">
  265. AND C4.CATE3_NO = #{cate3No}
  266. </if>
  267. <if test="cate4No != null and cate4No != ''">
  268. AND C4.CATE4_NO = #{cate4No}
  269. </if>
  270. <if test="cate5No != null and cate5No != ''">
  271. AND C4.CATE5_NO = #{cate5No}
  272. </if>
  273. AND G.GOODS_STAT = 'G008_90' /*승인완료상품*/
  274. AND G.SELF_MALL_YN = 'Y' /*몰노출상품*/
  275. AND NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT /*판매기간*/
  276. AND GS.STOCK_QTY <![CDATA[>]]> 0 /*재고있는상품*/
  277. AND SB.SITE_CD = #{siteCd}
  278. AND SB.USE_YN = 'Y' /*사이트에서 사용하는 브랜드*/
  279. AND B.USE_YN = 'Y' /*사용하는 브랜드*/
  280. )
  281. AND USE_YN = 'Y'
  282. ORDER BY DISP_ORD
  283. ;
  284. -- 필터-컬러 (getFilterColorList)
  285. SELECT C.COLOR_GRP_CD /*컬러그룹코드*/
  286. , CC.CD_DESC AS COLOR_CHIP /*컬러칩*/
  287. FROM TB_COLOR C
  288. , TB_COMMON_CODE CC
  289. WHERE C.COLOR_GRP_CD = CC.CD
  290. AND CC.CD_GB = 'G072'
  291. AND C.COLOR_CD IN (SELECT O.OPT_CD1
  292. FROM TB_CATE_4SRCH C4
  293. , TB_CATE_GOODS CG
  294. , TB_GOODS G
  295. , TB_GOODS_STOCK GS
  296. , TB_BRAND B
  297. , TB_SITE_BRAND SB
  298. , TB_OPTION O
  299. WHERE C4.LEAF_CATE_NO = CG.CATE_NO
  300. <choose>
  301. <when test="brandGroupNo != null and brandGroupNo != ''">
  302. AND CG.BRAND_GROUP_NO = #{brandGroupNo}
  303. </when>
  304. <otherwise>
  305. AND CG.BRAND_GROUP_NO = 0 /*브랜드메인에서 접근한 것이 아니면*/
  306. </otherwise>
  307. </choose>
  308. AND CG.GOODS_CD = G.GOODS_CD
  309. AND CG.GOODS_CD = GS.GOODS_CD
  310. AND G.BRAND_CD = B.BRAND_CD
  311. AND B.BRAND_CD = SB.BRAND_CD
  312. AND G.GOODS_CD = O.GOODS_CD
  313. AND C4.SITE_CD = #{siteCd}
  314. AND C4.CATE_GB = #{cateGb}
  315. AND C4.CATE_TYPE = 'G031_10' /*상품카테고리*/
  316. AND C4.CATE1_NO = #{cate1No}
  317. <if test="cate2No != null and cate2No != ''">
  318. AND C4.CATE2_NO = #{cate2No}
  319. </if>
  320. <if test="cate3No != null and cate3No != ''">
  321. AND C4.CATE3_NO = #{cate3No}
  322. </if>
  323. <if test="cate4No != null and cate4No != ''">
  324. AND C4.CATE4_NO = #{cate4No}
  325. </if>
  326. <if test="cate5No != null and cate5No != ''">
  327. AND C4.CATE5_NO = #{cate5No}
  328. </if>
  329. AND G.GOODS_STAT = 'G008_90' /*승인완료상품*/
  330. AND G.SELF_MALL_YN = 'Y' /*몰노출상품*/
  331. AND NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT /*판매기간*/
  332. AND GS.STOCK_QTY <![CDATA[>]]> 0 /*재고있는상품*/
  333. AND SB.SITE_CD = #{siteCd}
  334. AND SB.USE_YN = 'Y' /*사이트에서 사용하는 브랜드*/
  335. AND B.USE_YN = 'Y' /*사용하는 브랜드*/
  336. AND O.SOLDOUT_YN = 'N' /*품절이 아닌 옵션*/
  337. AND O.DISP_YN = 'Y' /*노출하는 옵션*/
  338. )
  339. AND CC.USE_YN = 'Y'
  340. ORDER BY CC.DISP_ORD
  341. ;
  342. -- 필터 - 상품혜택 (getFilterGoodsBenefitList)
  343. WITH TAB_BENEFIT AS (
  344. SELECT GB.CPN_YN
  345. , GB.FREEGIFT_YN
  346. , G.FORMAL_GB
  347. , G.MIN_ORD_AMT
  348. , FN_GET_BENEFIT_PRICE(#{frontGb},G.GOODS_CD,G.CURR_PRICE,#{custGb}) AS CURR_PRICE /*현재판매가*/
  349. FROM TB_CATE_4SRCH C4
  350. , TB_CATE_GOODS CG
  351. , TB_GOODS G
  352. , TB_GOODS_STOCK GS
  353. , TB_GOODS_BENEFIT GB
  354. , TB_BRAND B
  355. , TB_SITE_BRAND SB
  356. WHERE C4.LEAF_CATE_NO = CG.CATE_NO
  357. <choose>
  358. <when test="brandGroupNo != null and brandGroupNo != ''">
  359. AND CG.BRAND_GROUP_NO = #{brandGroupNo}
  360. </when>
  361. <otherwise>
  362. AND CG.BRAND_GROUP_NO = 0 /*브랜드메인에서 접근한 것이 아니면*/
  363. </otherwise>
  364. </choose>
  365. AND CG.GOODS_CD = G.GOODS_CD
  366. AND CG.GOODS_CD = GS.GOODS_CD
  367. AND G.GOODS_CD = GB.GOODS_CD
  368. AND G.BRAND_CD = B.BRAND_CD
  369. AND B.BRAND_CD = SB.BRAND_CD
  370. AND C4.SITE_CD = #{siteCd}
  371. AND C4.CATE_GB = #{cateGb}
  372. AND C4.CATE_TYPE = 'G031_10' /*상품카테고리*/
  373. AND C4.CATE1_NO = #{cate1No}
  374. <if test="cate2No != null and cate2No != ''">
  375. AND C4.CATE2_NO = #{cate2No}
  376. </if>
  377. <if test="cate3No != null and cate3No != ''">
  378. AND C4.CATE3_NO = #{cate3No}
  379. </if>
  380. <if test="cate4No != null and cate4No != ''">
  381. AND C4.CATE4_NO = #{cate4No}
  382. </if>
  383. <if test="cate5No != null and cate5No != ''">
  384. AND C4.CATE5_NO = #{cate5No}
  385. </if>
  386. AND G.GOODS_STAT = 'G008_90' /*승인완료상품*/
  387. AND G.SELF_MALL_YN = 'Y' /*몰노출상품*/
  388. AND NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT /*판매기간*/
  389. AND GS.STOCK_QTY <![CDATA[>]]> 0 /*재고있는상품*/
  390. AND SB.SITE_CD = #{siteCd}
  391. AND SB.USE_YN = 'Y' /*사이트에서 사용하는 브랜드*/
  392. AND B.USE_YN = 'Y' /*사용하는 브랜드*/
  393. )
  394. SELECT '10' AS BENEFIT_CD
  395. , '쿠폰할인' AS BENEFIT_NM
  396. FROM TAB_BENEFIT
  397. WHERE CPN_YN = 'Y'
  398. UNION ALL
  399. SELECT '20' AS BENEFIT_CD
  400. , '무료배송' AS BENEFIT_NM
  401. FROM TAB_BENEFIT
  402. WHERE MIN_ORD_AMT >= CURR_PRICE
  403. UNION ALL
  404. SELECT '30' AS BENEFIT_CD
  405. , '사은품' AS BENEFIT_NM
  406. FROM TAB_BENEFIT
  407. WHERE FREEGIFT_YN = 'Y'
  408. UNION ALL
  409. SELECT '40' AS BENEFIT_CD
  410. , '신상' AS BENEFIT_NM
  411. FROM TAB_BENEFIT
  412. WHERE FORMAL_GB = 'G009_10'
  413. ;
  414. <!-- 상품 목록 -->
  415. <select id="getGoodsList" parameterType="Cate4Srch" resultType="Goods">
  416. /* TsfGoods.getGoodsList */
  417. WITH TAB_GOODS AS (
  418. SELECT G.BRAND_GROUP_NM /*브랜드그룹명*/
  419. , G.GOODS_CD /*상품코드*/
  420. , G.GOODS_NM /*상품명*/
  421. , G.GOODS_GB /*상품구분*/
  422. , G.FOREIGN_BUY_YN /*해외구매대행여부*/
  423. , G.PARALLEL_IMPORT_YN /*병행수입여부*/
  424. , G.ORDER_MADE_YN /*주문제작여부*/
  425. , G.GOODS_TNM /*상품타이틀명*/
  426. , G.MAIN_COLOR_CD /*대표색상코드*/
  427. , G.LIST_PRICE /*정상가(최초판매가)*/
  428. , G.CURR_PRICE /*현재판매가*/
  429. , G.REG_DT /*등록일시*/
  430. , G.OPT_CD1 /*옵션코드1(색상코드)*/
  431. , G.NUMB
  432. FROM (
  433. SELECT CASE WHEN BG.DISP_NM_LANG = 'EN' THEN
  434. BG.BRAND_GROUP_ENM
  435. ELSE
  436. BG.BRAND_GROUP_KNM
  437. END AS BRAND_GROUP_NM /*브랜드그룹명*/
  438. , G.GOODS_CD /*상품코드*/
  439. , G.GOODS_NM /*상품명*/
  440. , G.GOODS_GB /*상품구분*/
  441. , G.FOREIGN_BUY_YN /*해외구매대행여부*/
  442. , G.PARALLEL_IMPORT_YN /*병행수입여부*/
  443. , G.ORDER_MADE_YN /*주문제작여부*/
  444. , G.GOODS_TNM /*상품타이틀명*/
  445. , G.MAIN_COLOR_CD /*대표색상코드*/
  446. , G.LIST_PRICE /*정상가(최초판매가)*/
  447. , FN_GET_BENEFIT_PRICE(#{frontGb},G.GOODS_CD,G.CURR_PRICE,#{custGb}) AS CURR_PRICE /*현재판매가*/
  448. , G.MIN_ORD_AMT /*최수주문금액*/
  449. , G.REG_DT /*등록일시*/
  450. , O.OPT_CD1 /*옵션코드1(색상코드)*/
  451. <choose>
  452. <when test="sortingType == 'BELOVED'"> <!-- 인기상품순 -->
  453. , RANK() OVER(ORDER BY CG.DISP_ORD
  454. , GS.SELL_WEEK_QTY DESC
  455. , G.GOODS_CD) AS NUMB
  456. </when>
  457. <when test="sortingType == 'REVIEW'"> <!-- 리뷰많은순 -->
  458. , RANK() OVER(ORDER BY CG.DISP_ORD
  459. , GS.REVIEW_REG_CNT DESC
  460. , G.GOODS_CD) AS NUMB
  461. </when>
  462. <otherwise> <!-- 최신상품순 -->
  463. , RANK() OVER(ORDER BY CG.DISP_ORD
  464. , G.FORMAL_GB
  465. , G.REG_DT DESC
  466. , G.GOODS_CD) AS NUMB
  467. </otherwise>
  468. </choose>
  469. FROM TB_CATE_4SRCH C4
  470. , TB_CATE_GOODS CG
  471. , TB_GOODS G
  472. , TB_GOODS_STOCK S
  473. , TB_BRAND B
  474. , TB_BRAND_GROUP BG
  475. , TB_OPTION O
  476. <if test="sortingType == 'BELOVED' or sortingType == 'REVIEW'"> <!-- 인기상품순, 리뷰많은순 -->
  477. , TB_GOODS_SUMMARY GS
  478. </if>
  479. WHERE C4.LEAF_CATE_NO = CG.CATE_NO
  480. AND CG.GOODS_CD = G.GOODS_CD
  481. AND G.GOODS_CD = S.GOODS_CD
  482. AND G.BRAND_CD = B.BRAND_CD
  483. AND B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
  484. AND G.GOODS_CD = O.GOODS_CD
  485. <if test="sortingType == 'BELOVED' or sortingType == 'REVIEW'"> <!-- 인기상품순, 리뷰많은순 -->
  486. AND G.GOODS_CD = GS.GOODS_CD
  487. </if>
  488. AND C4.SITE_CD = #{siteCd}
  489. AND C4.CATE_GB = #{cateGb}
  490. AND C4.CATE_TYPE = 'G031_10' /*상품카테고리*/
  491. AND C4.CATE1_NO = #{cate1No}
  492. <if test="cate2No != null and cate2No != ''">
  493. AND C4.CATE2_NO = #{cate2No}
  494. </if>
  495. <if test="cate3No != null and cate3No != ''">
  496. AND C4.CATE3_NO = #{cate3No}
  497. </if>
  498. <if test="cate4No != null and cate4No != ''">
  499. AND C4.CATE4_NO = #{cate4No}
  500. </if>
  501. <if test="cate5No != null and cate5No != ''">
  502. AND C4.CATE5_NO = #{cate5No}
  503. </if>
  504. <choose>
  505. <when test="brandGroupNo != null and brandGroupNo != ''">
  506. AND CG.BRAND_GROUP_NO = #{brandGroupNo}
  507. </when>
  508. <otherwise>
  509. AND CG.BRAND_GROUP_NO = 0 /*브랜드메인에서 접근한 것이 아니면*/
  510. </otherwise>
  511. </choose>
  512. <if test="brandGroupNoArr != null and brandGroupNoArr.length > 0">
  513. AND CG.BRAND_GROUP_NO IN
  514. <foreach collection="brandGroupNoArr" item="item" index="index" open="(" close=")" separator=",">
  515. #{item}
  516. </foreach>
  517. </if>
  518. AND G.GOODS_STAT = 'G008_90' /*승인완료상품*/
  519. AND G.SELF_MALL_YN = 'Y' /*몰노출상품*/
  520. AND NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT /*유효한 판매기간*/
  521. <if test="agesArr != null and agesArr.length > 0"> <!-- 연령대 -->
  522. AND G.AGE_GRP_CD IN
  523. <foreach collection="agesArr" item="item" index="index" open="(" close=")" separator=",">
  524. #{item}
  525. </foreach>
  526. </if>
  527. <if test="seasonArr != null and seasonArr.length > 0"> <!-- 시즌 -->
  528. AND G.SEASON_CD IN
  529. <foreach collection="seasonArr" item="item" index="index" open="(" close=")" separator=",">
  530. #{item}
  531. </foreach>
  532. </if>
  533. AND S.STOCK_QTY <![CDATA[>]]> 0 /*재고있는 상품*/
  534. AND B.USE_YN = 'Y' /*사용하는 브랜드*/
  535. AND BG.USE_YN = 'Y' /*사용하는 브랜드그룹*/
  536. <if test="colorArr != null and colorArr.length > 0"> <!-- 색상 -->
  537. AND O.OPT_CD1 IN (SELECT COLOR_CD
  538. FROM TB_COLOR
  539. WHERE COLOR_GRP_CD IN
  540. <foreach collection="colorArr" item="item" index="index" open="(" close=")" separator=",">
  541. #{item}
  542. </foreach>
  543. AND USE_YN = 'Y' /*사용하는색상*/
  544. )
  545. </if>
  546. <if test="sizeArr != null and sizeArr.length > 0"> <!-- 사이즈 -->
  547. AND O.OPT_CD2 IN
  548. <foreach collection="sizeArr" item="item" index="index" open="(" close=")" separator=",">
  549. #{item}
  550. </foreach>
  551. </if>
  552. ) G
  553. WHERE G.NUMB <![CDATA[<=]]> #{maxRow}
  554. <if test="priceFrom != null and priceFrom != ''"> <!-- 가격 -->
  555. AND G.CURR_PRICE <![CDATA[>=]]> #{priceFrom}
  556. </if>
  557. <if test="priceTo != null and priceTo != ''"> <!-- 가격 -->
  558. AND G.CURR_PRICE <![CDATA[<=]]> #{priceTo}
  559. </if>
  560. <if test="dcRateFrom != null and dcRateFrom != ''"> <!-- 할인율 -->
  561. AND ((IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) - G.CURR_PRICE) / IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) * 100) <![CDATA[>=]]> #{dcRateFrom}
  562. </if>
  563. <if test="dcRateTo != null and dcRateTo != ''"> <!-- 할인율 -->
  564. AND ((IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) - G.CURR_PRICE) / IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) * 100) <![CDATA[<=]]> #{dcRateTo}
  565. </if>
  566. <if test="benefitArr != null and benefitArr.length > 0"> <!-- 혜택 -->
  567. <foreach collection="benefitArr" item="item" index="index">
  568. <if test="item == '10'"> <!-- 쿠폰할인 -->
  569. AND EXISTS (SELECT 1
  570. FROM TB_GOODS_BENEFIT
  571. WHERE GOODS_CD = G.GOODS_CD
  572. AND CPN_YN = 'Y'
  573. )
  574. </if>
  575. <if test="item == '20'"> <!-- 무료배송 -->
  576. AND G.MIN_ORD_AMT <![CDATA[>=]]> G.CURR_PRICE
  577. </if>
  578. <if test="item == '30'"> <!-- 사은품 -->
  579. AND EXISTS (SELECT 1
  580. FROM TB_GOODS_BENEFIT
  581. WHERE GOODS_CD = G.GOODS_CD
  582. AND FREEGIFT_YN = 'Y'
  583. )
  584. </if>
  585. <if test="item == '40'"> <!-- 신상 -->
  586. AND G.FORMAL_GB = 'G009_10'
  587. </if>
  588. </foreach>
  589. </if>
  590. )
  591. , TAB_GOODS_IMG AS (
  592. /* 상품의 이미지 */
  593. SELECT GOODS_CD
  594. ,MAX(SYS_IMG_NM) AS SYS_IMG_NM
  595. ,MAX(SYS_IMG_NM2) AS SYS_IMG_NM2
  596. FROM (
  597. SELECT G.GOODS_CD
  598. , CASE WHEN GI.DEFAULT_IMG_YN = 'Y' THEN GI.SYS_IMG_NM ELSE NULL END AS SYS_IMG_NM
  599. , CASE WHEN GI.MOUSEOVER_IMG_YN = 'Y' THEN GI.SYS_IMG_NM ELSE NULL END AS SYS_IMG_NM2
  600. FROM TAB_GOODS G
  601. , TB_GOODS_IMG GI
  602. WHERE G.GOODS_CD = GI.GOODS_CD
  603. AND G.MAIN_COLOR_CD = GI.COLOR_CD
  604. ) Z
  605. GROUP BY GOODS_CD
  606. )
  607. , TAB_GOODS_VIDEO AS (
  608. /* 상품의 동영상 목록 */
  609. SELECT GOODS_CD
  610. , MAX(CASE WHEN RNUM = 1 THEN VIDEO_GB END) AS VIDEO_GB_M
  611. , MAX(CASE WHEN RNUM = 1 THEN VIDEO_VAL END) AS VIDEO_VAL_M
  612. , MAX(CASE WHEN RNUM = 2 THEN VIDEO_GB END) AS VIDEO_GB_S
  613. , MAX(CASE WHEN RNUM = 2 THEN VIDEO_VAL END) AS VIDEO_VAL_S
  614. FROM (
  615. SELECT G.GOODS_CD
  616. , V.VIDEO_GB
  617. , V.VIDEO_VAL
  618. , VD.REG_DT
  619. , RANK() OVER(PARTITION BY G.GOODS_CD ORDER BY VD.REG_DT) AS RNUM
  620. FROM TAB_GOODS G
  621. , TB_VIDEO_DISPLOC VD
  622. , TB_VIDEO V
  623. WHERE G.GOODS_CD = VD.DISPLOC_VAL
  624. AND VD.VIDEO_SQ = V.VIDEO_SQ
  625. AND VD.DISPLOC_GB = 'G' /*상품*/
  626. AND VD.DISP_YN = 'Y'
  627. AND V.DISP_YN ='Y'
  628. ) Z
  629. GROUP BY GOODS_CD
  630. )
  631. SELECT G.BRAND_GROUP_NM
  632. , G.GOODS_CD
  633. , FN_GET_GOODS_NM(G.GOODS_NM,G.GOODS_GB,G.FOREIGN_BUY_YN,G.PARALLEL_IMPORT_YN,G.ORDER_MADE_YN) AS GOODS_FULL_NM /*상품FULL명*/
  634. , G.GOODS_TNM
  635. , G.MAIN_COLOR_CD
  636. , G.LIST_PRICE
  637. , G.CURR_PRICE /*현재판매가*/
  638. , GI.SYS_IMG_NM
  639. , GI.SYS_IMG_NM2
  640. , GV.VIDEO_GB_M
  641. , GV.VIDEO_VAL_M
  642. , GV.VIDEO_GB_S
  643. , GV.VIDEO_VAL_S
  644. <choose>
  645. <when test="custNo != null and custNo > 0"> <!-- 로그인 했으면 -->
  646. , IF(W.GOODS_CD IS NULL,'','likeit') AS LIKE_IT /*위시리스트담긴상품*/
  647. </when>
  648. <otherwise>
  649. , '' AS LIKE_IT /*위시리스트담긴상품*/
  650. </otherwise>
  651. </choose>
  652. FROM TAB_GOODS G
  653. LEFT OUTER JOIN TAB_GOODS_IMG GI ON G.GOODS_CD = GI.GOODS_CD
  654. LEFT OUTER JOIN TAB_GOODS_VIDEO GV ON G.GOODS_CD = GV.GOODS_CD
  655. <if test="custNo != null and custNo > 0"> <!-- 로그인 했으면 -->
  656. LEFT OUTER JOIN TB_WISHLIST W ON G.GOODS_CD = W.GOODS_CD
  657. AND W.CUST_NO = #{custNo}
  658. </if>
  659. </select>
  660. <!-- 소셜상품(=핫딜) 목록 -->
  661. <select id="getSocialGoodsList" resultType="Social" parameterType="Social">
  662. /* TsfSocial.getSocialGoodsList */
  663. WITH TAB_GOODS AS (
  664. SELECT S.SOCIAL_SQ
  665. , CASE WHEN BG.DISP_NM_LANG = 'EN' THEN
  666. BG.BRAND_GROUP_ENM
  667. ELSE
  668. BG.BRAND_GROUP_KNM
  669. END AS BRAND_GROUP_NM /*브랜드그룹명*/
  670. , SG.GOODS_CD /*상품코드*/
  671. , G.GOODS_TNM /*상품타이틀명*/
  672. , G.MAIN_COLOR_CD /*메인컬러코드*/
  673. , G.GOODS_NM /*상품명*/
  674. , G.GOODS_GB /*상품구분*/
  675. , G.FOREIGN_BUY_YN /*해외구매대행여부*/
  676. , G.PARALLEL_IMPORT_YN /*병행수입여부*/
  677. , G.ORDER_MADE_YN /*주문제작여부*/
  678. , G.LIST_PRICE /*정상가*/
  679. , SG.CURR_APRICE AS CURR_PRICE /*변경후현재판매가*/
  680. , SG.DC_ARATE AS DC_RATE /*변경후할인율*/
  681. , SG.DISP_ORD /*노출순서*/
  682. , G.GOODS_TYPE /*상품유형*/
  683. , G.GOODS_STAT /*상품상태*/
  684. , ROW_NUMBER() OVER(ORDER BY SG.DISP_ORD
  685. , SG.GOODS_CD) AS NUMB
  686. FROM TB_SOCIAL S
  687. , TB_SOCIAL_GOODS SG
  688. , TB_GOODS G
  689. , TB_BRAND B
  690. , TB_BRAND_GROUP BG
  691. WHERE S.SOCIAL_SQ = SG.SOCIAL_SQ
  692. AND SG.GOODS_CD = G.GOODS_CD
  693. AND G.BRAND_CD = B.BRAND_CD
  694. AND B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
  695. AND S.SOCIAL_SQ = #{socialSq}
  696. AND NOW() BETWEEN S.SOCIAL_STDT AND S.SOCIAL_EDDT
  697. AND S.SOCIAL_TYPE = 'G062_10' /*핫딜*/
  698. AND S.SITE_CD = #{siteCd}
  699. AND S.FRONT_GB IN ('A', #{frontGb}) /*프론트구분*/
  700. AND S.APPLY_GB = 'A' /*적용구분(P:대기,A:적용,F:종료)*/
  701. AND S.USE_YN = 'Y' /*사용하는소셜*/
  702. AND SG.DEL_YN = 'N' /*삭제안된상품*/
  703. AND G.GOODS_STAT = 'G008_90' /*승인완료상품*/
  704. AND G.SELF_MALL_YN = 'Y' /*몰노출상품*/
  705. AND NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT /*유효한판매기간*/
  706. )
  707. , TAB_GOODS_IMG AS (
  708. /* 상품의 이미지 */
  709. SELECT GOODS_CD
  710. , MAX(SYS_IMG_NM) AS SYS_IMG_NM
  711. , MAX(SYS_IMG_NM2) AS SYS_IMG_NM2
  712. FROM (
  713. SELECT G.GOODS_CD
  714. , CASE WHEN GI.DEFAULT_IMG_YN = 'Y' THEN GI.SYS_IMG_NM ELSE NULL END AS SYS_IMG_NM
  715. , CASE WHEN GI.MOUSEOVER_IMG_YN = 'Y' THEN GI.SYS_IMG_NM ELSE NULL END AS SYS_IMG_NM2
  716. FROM TAB_GOODS G
  717. , TB_GOODS_IMG GI
  718. WHERE G.GOODS_CD = GI.GOODS_CD
  719. AND G.MAIN_COLOR_CD = GI.COLOR_CD
  720. ) Z
  721. GROUP BY GOODS_CD
  722. )
  723. , TAB_STOCK AS (
  724. SELECT G.GOODS_CD
  725. , SUM(S.CURR_STOCK_QTY - S.BASE_STOCK_QTY) AS STOCK_QTY_SUM
  726. FROM TAB_GOODS G
  727. , VW_STOCK S
  728. WHERE G.GOODS_CD = S.GOODS_CD
  729. AND G.GOODS_TYPE = 'G056_N'
  730. AND S.DISP_YN = 'Y' /*노출하는상품만*/
  731. GROUP BY G.GOODS_CD
  732. UNION ALL
  733. SELECT G.GOODS_CD
  734. , SUM(S.CURR_STOCK_QTY - S.BASE_STOCK_QTY) AS STOCK_QTY_SUM
  735. FROM TAB_GOODS G
  736. , VW_STOCK_COMPOSE S
  737. WHERE G.GOODS_CD = S.GOODS_CD
  738. AND G.GOODS_TYPE != 'G056_N'
  739. AND S.DISP_YN = 'Y' /*노출하는상품만*/
  740. GROUP BY G.GOODS_CD
  741. )
  742. SELECT G.BRAND_GROUP_NM
  743. , G.GOODS_CD
  744. , FN_GET_GOODS_NM(G.GOODS_NM,G.GOODS_GB,G.FOREIGN_BUY_YN,G.PARALLEL_IMPORT_YN,G.ORDER_MADE_YN) AS GOODS_FULL_NM /*상품FULL명*/
  745. , G.GOODS_TNM
  746. , G.MAIN_COLOR_CD
  747. , G.LIST_PRICE
  748. , G.CURR_PRICE /*현재판매가*/
  749. , GI.SYS_IMG_NM
  750. , GI.SYS_IMG_NM2
  751. , S.STOCK_QTY_SUM
  752. <choose>
  753. <when test="custNo != null and custNo > 0"> <!-- 로그인 했으면 -->
  754. , IF(W.GOODS_CD IS NULL,'','likeit') AS LIKE_IT /*위시리스트담긴상품*/
  755. </when>
  756. <otherwise>
  757. , '' AS LIKE_IT /*위시리스트담긴상품*/
  758. </otherwise>
  759. </choose>
  760. FROM TAB_GOODS G
  761. LEFT OUTER JOIN TAB_GOODS_IMG GI ON G.GOODS_CD = GI.GOODS_CD
  762. LEFT OUTER JOIN TAB_STOCK S ON G.GOODS_CD = S.GOODS_CD
  763. <if test="custNo != null and custNo > 0"> <!-- 로그인 했으면 -->
  764. LEFT OUTER JOIN TB_WISHLIST W ON G.GOODS_CD = W.GOODS_CD
  765. AND W.CUST_NO = #{custNo}
  766. </if>
  767. </select>
  768. SELECT * FROM TB_GOODS_VIDEO;
  769. SELECT * FROM TB_GOODS_BENEFIT_PRICE;
  770. SELECT GROUP_CONCAT(CONCAT(VIDEO_GB,':',KMC_KEY) ORDER BY RNUM SEPARATOR ',')
  771. FROM (
  772. SELECT GV.VIDEO_GB
  773. , GV.KMC_KEY
  774. , GV.REG_DT
  775. , RANK() OVER(ORDER BY GV.REG_DT, GV.KMC_KEY) AS RNUM
  776. FROM TB_GOODS_VIDEO GV
  777. WHERE GV.GOODS_CD = 'CNW1XAPT32'
  778. AND GV.DISP_YN = 'Y'
  779. AND GV.KMC_KEY IS NOT NULL
  780. ) Z
  781. ;
  782. /* TsfGoods.getGoodsList */
  783. WITH TAB_GOODS AS (
  784. SELECT G.BRAND_GROUP_NM /*브랜드그룹명*/
  785. , G.GOODS_CD /*상품코드*/
  786. , G.GOODS_NM /*상품명*/
  787. , G.GOODS_GB /*상품구분*/
  788. , G.SELF_GOODS_YN /*자사상품여부*/
  789. , G.FOREIGN_BUY_YN /*해외구매대행여부*/
  790. , G.PARALLEL_IMPORT_YN /*병행수입여부*/
  791. , G.ORDER_MADE_YN /*주문제작여부*/
  792. , G.GOODS_TNM /*상품타이틀명*/
  793. , G.MAIN_COLOR_CD /*대표색상코드*/
  794. , G.LIST_PRICE /*정상가(최초판매가)*/
  795. , G.CURR_PRICE /*현재판매가*/
  796. , G.FORMAL_GB
  797. , G.REG_DT /*등록일시*/
  798. , G.SELL_WEEK_QTY /*주간판매수량*/
  799. , G.REVIEW_REG_CNT /*리뷰등록건수*/
  800. -- , G.NUMB
  801. FROM (
  802. SELECT CASE WHEN BG.DISP_NM_LANG = 'EN' THEN
  803. BG.BRAND_GROUP_ENM
  804. ELSE
  805. BG.BRAND_GROUP_KNM
  806. END AS BRAND_GROUP_NM /*브랜드그룹명*/
  807. , G.GOODS_CD /*상품코드*/
  808. , G.GOODS_NM /*상품명*/
  809. , G.GOODS_GB /*상품구분*/
  810. , G.SELF_GOODS_YN /*자사상품여부*/
  811. , G.FOREIGN_BUY_YN /*해외구매대행여부*/
  812. , G.PARALLEL_IMPORT_YN /*병행수입여부*/
  813. , G.ORDER_MADE_YN /*주문제작여부*/
  814. , G.GOODS_TNM /*상품타이틀명*/
  815. , G.MAIN_COLOR_CD /*대표색상코드*/
  816. , G.LIST_PRICE /*정상가(최초판매가)*/
  817. -- , FN_GET_BENEFIT_PRICE('P',G.GOODS_CD,G.CURR_PRICE,'') AS CURR_PRICE /*현재판매가*/
  818. , CASE WHEN #{frontGb} = 'P' AND #{custGb} = 'G100_20' THEN GBP.STAFF_PC_CURR_PRICE
  819. WHEN #{frontGb} = 'M' AND #{custGb} = 'G100_20' THEN GBP.STAFF_MO_CURR_PRICE
  820. WHEN #{frontGb} = 'A' AND #{custGb} = 'G100_20' THEN GBP.STAFF_APP_CURR_PRICE
  821. WHEN #{frontGb} = 'P' AND #{custGb} != 'G100_20' THEN GBP.PC_CURR_PRICE
  822. WHEN #{frontGb} = 'M' AND #{custGb} != 'G100_20' THEN GBP.MO_CURR_PRICE
  823. WHEN #{frontGb} = 'A' AND #{custGb} != 'G100_20' THEN GBP.APP_CURR_PRICE
  824. ELSE G.CURR_PRICE
  825. END AS CURR_PRICE /*현재판매가*/
  826. , G.MIN_ORD_AMT /*최수주문금액*/
  827. , G.FORMAL_GB /*정상이월구분*/
  828. , G.REG_DT /*등록일시*/
  829. , GS.SELL_WEEK_QTY /*주간판매수량*/
  830. , GS.REVIEW_REG_CNT /*리뷰등록건수*/
  831. FROM TB_CATE_4SRCH C4
  832. INNER JOIN TB_CATE_GOODS CG ON C4.LEAF_CATE_NO = CG.CATE_NO
  833. INNER JOIN TB_GOODS G ON CG.GOODS_CD = G.GOODS_CD
  834. INNER JOIN TB_GOODS_STOCK S ON CG.GOODS_CD = S.GOODS_CD
  835. INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
  836. INNER JOIN TB_BRAND_GROUP BG ON B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
  837. INNER JOIN TB_GOODS_SUMMARY GS ON CG.GOODS_CD = GS.GOODS_CD
  838. LEFT OUTER JOIN TB_GOODS_BENEFIT_PRICE GBP ON CG.GOODS_CD = GBP.GOODS_CD
  839. WHERE C4.SITE_CD = 'G000_10'
  840. AND C4.CATE_GB = 'G032_101'
  841. AND C4.CATE_TYPE = 'G031_10' /*상품카테고리*/
  842. AND C4.CATE1_NO = 1100
  843. -- <if test="cate2No != null and cate2No != ''">
  844. -- AND C4.CATE2_NO = #{cate2No}
  845. -- </if>
  846. -- <if test="cate3No != null and cate3No != ''">
  847. -- AND C4.CATE3_NO = #{cate3No}
  848. -- </if>
  849. -- <if test="cate4No != null and cate4No != ''">
  850. -- AND C4.CATE4_NO = #{cate4No}
  851. -- </if>
  852. -- <if test="cate5No != null and cate5No != ''">
  853. -- AND C4.CATE5_NO = #{cate5No}
  854. -- </if>
  855. -- <choose>
  856. -- <when test="brandGroupNo != null and brandGroupNo != ''">
  857. -- AND CG.BRAND_GROUP_NO = #{brandGroupNo}
  858. -- </when>
  859. -- <otherwise>
  860. AND CG.BRAND_GROUP_NO = 0 /*브랜드메인에서 접근한 것이 아니면*/
  861. -- </otherwise>
  862. -- </choose>
  863. AND G.GOODS_STAT = 'G008_90' /*승인완료상품*/
  864. AND G.SELF_MALL_YN = 'Y' /*몰노출상품*/
  865. AND NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT /*유효한 판매기간*/
  866. -- <if test="agesArr != null and agesArr.length > 0"> <!-- 연령대 -->
  867. -- AND G.AGE_GRP_CD IN
  868. -- <foreach collection="agesArr" item="item" index="index" open="(" close=")" separator=",">
  869. -- #{item}
  870. -- </foreach>
  871. -- </if>
  872. -- <if test="seasonArr != null and seasonArr.length > 0"> <!-- 시즌 -->
  873. -- AND G.SEASON_CD IN
  874. -- <foreach collection="seasonArr" item="item" index="index" open="(" close=")" separator=",">
  875. -- #{item}
  876. -- </foreach>
  877. -- </if>
  878. -- <if test="formalGb != null and formalGb != ''"> <!-- 정상이월구분 -->
  879. AND G.FORMAL_GB = 'G009_10' /*정상상품만*/
  880. -- </if>
  881. -- <if test="sexGb != null and sexGb != ''"> <!-- 성별구분 -->
  882. AND G.SEX_GB = 'G007_Z' /*남여공용*/
  883. -- </if>
  884. AND S.STOCK_QTY > 0 /*재고있는 상품*/
  885. AND B.USE_YN = 'Y' /*사용하는 브랜드*/
  886. -- <if test="brandGroupNoArr != null and brandGroupNoArr.length > 0">
  887. -- AND BG.BRAND_GROUP_NO IN
  888. -- <foreach collection="brandGroupNoArr" item="item" index="index" open="(" close=")" separator=",">
  889. -- #{item}
  890. -- </foreach>
  891. -- </if>
  892. AND BG.USE_YN = 'Y' /*사용하는 브랜드그룹*/
  893. -- <if test="benefitArr != null and benefitArr.length > 0"> <!-- 혜택 -->
  894. -- AND EXISTS (SELECT 1
  895. -- FROM TB_GOODS_BENEFIT
  896. -- WHERE GOODS_CD = CG.GOODS_CD
  897. -- AND BENEFIT_GB IN
  898. -- <foreach collection="benefitArr" item="item" index="index" open="(" close=")" separator=",">
  899. -- #{item}
  900. -- </foreach>
  901. -- )
  902. -- </if>
  903. -- <if test="sizeArr != null and sizeArr.length > 0"> <!-- 사이즈 -->
  904. -- AND EXISTS (SELECT 1
  905. -- FROM TB_OPTION
  906. -- WHERE GOODS_CD = CG.GOODS_CD
  907. -- AND OPT_CD2 IN
  908. -- <foreach collection="sizeArr" item="item" index="index" open="(" close=")" separator=",">
  909. -- #{item}
  910. -- </foreach>
  911. -- AND DISP_YN = 'N'
  912. -- )
  913. -- </if>
  914. ) G
  915. WHERE 1 = 1
  916. -- <if test="priceFrom != null and priceFrom != ''"> <!-- 가격 -->
  917. -- AND G.CURR_PRICE <![CDATA[>=]]> #{priceFrom}
  918. -- </if>
  919. -- <if test="priceTo != null and priceTo != ''"> <!-- 가격 -->
  920. -- AND G.CURR_PRICE <![CDATA[<=]]> #{priceTo}
  921. -- </if>
  922. -- <if test="dcRateFrom != null and dcRateFrom != ''"> <!-- 할인율 -->
  923. -- AND ((IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) - G.CURR_PRICE) / IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) * 100) <![CDATA[>=]]> #{dcRateFrom}
  924. -- </if>
  925. -- <if test="dcRateTo != null and dcRateTo != ''"> <!-- 할인율 -->
  926. -- AND ((IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) - G.CURR_PRICE) / IF(G.LIST_PRICE = 0,0,G.LIST_PRICE) * 100) <![CDATA[<=]]> #{dcRateTo}
  927. -- </if>
  928. )
  929. , TAB_OPTION AS (
  930. /* 자사상품 색상 목록 */
  931. SELECT O.GOODS_CD
  932. , O.OPT_CD1 AS MAIN_COLOR_CD
  933. FROM TAB_GOODS G
  934. , TB_OPTION O
  935. WHERE G.GOODS_CD = O.GOODS_CD
  936. AND G.SELF_GOODS_YN = 'Y' /*자사상품만*/
  937. -- <if test="colorArr != null and colorArr.length > 0"> <!-- 색상 -->
  938. AND O.OPT_CD1 IN (SELECT COLOR_CD
  939. FROM TB_COLOR
  940. WHERE 1 = 1
  941. -- AND COLOR_GRP_CD IN
  942. -- <foreach collection="colorArr" item="item" index="index" open="(" close=")" separator=",">
  943. -- #{item}
  944. -- </foreach>
  945. AND USE_YN = 'Y' /*사용하는색상*/
  946. )
  947. -- </if>
  948. AND O.DISP_YN = 'N'
  949. GROUP BY O.GOODS_CD, O.OPT_CD1
  950. )
  951. , TAB_ALL_GOODS AS (
  952. SELECT *
  953. FROM (
  954. SELECT G.BRAND_GROUP_NM
  955. , G.GOODS_CD
  956. , G.GOODS_NM /*상품명*/
  957. , G.GOODS_GB /*상품구분*/
  958. , G.SELF_GOODS_YN /*자사상품여부*/
  959. , G.FOREIGN_BUY_YN /*해외구매대행여부*/
  960. , G.PARALLEL_IMPORT_YN /*병행수입여부*/
  961. , G.ORDER_MADE_YN /*주문제작여부*/
  962. , G.GOODS_TNM /*상품타이틀명*/
  963. , IFNULL(O.MAIN_COLOR_CD,G.MAIN_COLOR_CD) AS MAIN_COLOR_CD /*대표색상코드*/
  964. , G.LIST_PRICE /*정상가(최초판매가)*/
  965. , G.CURR_PRICE /*현재판매가*/
  966. , G.FORMAL_GB
  967. , G.REG_DT /*등록일시*/
  968. , G.SELL_WEEK_QTY
  969. , G.REVIEW_REG_CNT
  970. -- <choose>
  971. -- <when test="sortingType == 'BELOVED'"> <!-- 인기상품순 -->
  972. -- , RANK() OVER(ORDER BY GS.SELL_WEEK_QTY DESC
  973. -- , G.GOODS_CD) AS NUMB
  974. -- </when>
  975. -- <when test="sortingType == 'REVIEW'"> <!-- 리뷰많은순 -->
  976. -- , RANK() OVER(ORDER BY GS.REVIEW_REG_CNT DESC
  977. -- , G.GOODS_CD) AS NUMB
  978. -- </when>
  979. -- <otherwise> <!-- 최신상품순 -->
  980. , RANK() OVER(ORDER BY G.FORMAL_GB
  981. , G.REG_DT DESC
  982. , G.GOODS_CD) AS NUMB
  983. -- </otherwise>
  984. -- </choose>
  985. FROM TAB_GOODS G
  986. LEFT OUTER JOIN TAB_OPTION O ON G.GOODS_CD = O.GOODS_CD
  987. ) ORIGINAL
  988. WHERE NUMB BETWEEN 1 AND 30
  989. )
  990. , TAB_GOODS_IMG AS (
  991. /* 상품의 이미지 */
  992. SELECT GOODS_CD
  993. ,MAX(SYS_IMG_NM) AS SYS_IMG_NM
  994. ,MAX(SYS_IMG_NM2) AS SYS_IMG_NM2
  995. FROM (
  996. SELECT G.GOODS_CD
  997. , CASE WHEN GI.DEFAULT_IMG_YN = 'Y' THEN GI.SYS_IMG_NM ELSE NULL END AS SYS_IMG_NM
  998. , CASE WHEN GI.MOUSEOVER_IMG_YN = 'Y' THEN GI.SYS_IMG_NM ELSE NULL END AS SYS_IMG_NM2
  999. FROM TAB_ALL_GOODS G
  1000. , TB_GOODS_IMG GI
  1001. WHERE G.GOODS_CD = GI.GOODS_CD
  1002. AND G.MAIN_COLOR_CD = GI.COLOR_CD
  1003. ) Z
  1004. GROUP BY GOODS_CD
  1005. )
  1006. -- , TAB_GOODS_VIDEO AS (
  1007. -- /* 상품의 동영상 목록 */
  1008. -- SELECT GOODS_CD
  1009. -- , MAX(CASE WHEN RNUM = 1 THEN VIDEO_GB END) AS VIDEO_GB_M
  1010. -- , MAX(CASE WHEN RNUM = 1 THEN KMC_KEY END) AS VIDEO_VAL_M
  1011. -- , MAX(CASE WHEN RNUM = 2 THEN VIDEO_GB END) AS VIDEO_GB_S
  1012. -- , MAX(CASE WHEN RNUM = 2 THEN KMC_KEY END) AS VIDEO_VAL_S
  1013. -- FROM (
  1014. -- SELECT G.GOODS_CD
  1015. -- , GV.VIDEO_GB
  1016. -- , GV.KMC_KEY
  1017. -- , GV.REG_DT
  1018. -- , RANK() OVER(PARTITION BY G.GOODS_CD ORDER BY GV.REG_DT) AS RNUM
  1019. -- FROM TAB_ALL_GOODS G
  1020. -- , TB_GOODS_VIDEO GV
  1021. -- WHERE G.GOODS_CD = GV.GOODS_CD
  1022. -- AND GV.DISP_YN = 'Y'
  1023. -- AND GV.KMC_KEY IS NOT NULL
  1024. -- ) Z
  1025. -- GROUP BY GOODS_CD
  1026. -- )
  1027. SELECT G.BRAND_GROUP_NM
  1028. , G.GOODS_CD
  1029. , FN_GET_GOODS_NM(G.GOODS_NM,G.GOODS_GB,G.FOREIGN_BUY_YN,G.PARALLEL_IMPORT_YN,G.ORDER_MADE_YN) AS GOODS_FULL_NM /*상품FULL명*/
  1030. -- 자사 단품의 색상(컬러칩) 리스트
  1031. -- 자사 단품의 색상별 사이즈 리스트
  1032. , G.GOODS_TNM
  1033. , G.MAIN_COLOR_CD
  1034. , G.LIST_PRICE
  1035. , G.CURR_PRICE /*현재판매가*/
  1036. , GI.SYS_IMG_NM
  1037. , GI.SYS_IMG_NM2
  1038. -- , (
  1039. -- SELECT MAX(GI.SYS_IMG_NM)
  1040. -- FROM TB_GOODS_IMG GI
  1041. -- WHERE GI.GOODS_CD = G.GOODS_CD
  1042. -- AND GI.COLOR_CD = G.MAIN_COLOR_CD
  1043. -- AND GI.DEFAULT_IMG_YN = 'Y'
  1044. -- ) AS SYS_IMG_NM
  1045. -- , (
  1046. -- SELECT MAX(GI.SYS_IMG_NM)
  1047. -- FROM TB_GOODS_IMG GI
  1048. -- WHERE GI.GOODS_CD = G.GOODS_CD
  1049. -- AND GI.COLOR_CD = G.MAIN_COLOR_CD
  1050. -- AND GI.MOUSEOVER_IMG_YN = 'Y'
  1051. -- ) AS SYS_IMG_NM2
  1052. , (
  1053. SELECT GROUP_CONCAT(CONCAT(VIDEO_GB,':',KMC_KEY) ORDER BY NUMB SEPARATOR ',')
  1054. FROM (
  1055. SELECT GV.VIDEO_GB
  1056. , GV.KMC_KEY
  1057. , GV.REG_DT
  1058. , RANK() OVER(ORDER BY GV.REG_DT, GV.KMC_KEY) AS NUMB
  1059. FROM TB_GOODS_VIDEO GV
  1060. WHERE GV.GOODS_CD = G.GOODS_CD
  1061. AND GV.DISP_YN = 'Y'
  1062. AND GV.KMC_KEY IS NOT NULL
  1063. ) Z
  1064. WHERE NUMB <= 2
  1065. ) AS VIDEO_VAL
  1066. , (
  1067. SELECT GROUP_CONCAT(DISTINCT CONCAT(C.COLOR_CD,':',CC.CD_DESC) ORDER BY CC.DISP_ORD SEPARATOR ',') AS COLOR_CHIPS
  1068. FROM TB_OPTION O
  1069. , TB_COLOR C
  1070. , TB_COMMON_CODE CC
  1071. WHERE O.OPT_CD1 = C.COLOR_CD
  1072. AND C.COLOR_GRP_CD = CC.CD
  1073. AND O.GOODS_CD = G.GOODS_CD
  1074. AND O.DISP_YN = 'Y'
  1075. AND C.USE_YN = 'Y'
  1076. AND CC.USE_YN = 'Y'
  1077. ) AS COLOR_CHIPS /*컬러칩*/
  1078. , (
  1079. SELECT GROUP_CONCAT(DISTINCT CONCAT(OPT_CD2
  1080. ,':'
  1081. ,CASE WHEN SOLDOUT_YN = 'Y' THEN 'Y'
  1082. ELSE
  1083. CASE WHEN CURR_STOCK_QTY - BASE_STOCK_QTY > 0 THEN 'N'
  1084. ELSE 'Y'
  1085. END
  1086. END)
  1087. ORDER BY DISP_ORD SEPARATOR ',') AS SIZES
  1088. FROM VW_STOCK
  1089. WHERE GOODS_CD = G.GOODS_CD
  1090. AND OPT_CD1 = G.MAIN_COLOR_CD
  1091. AND DISP_YN = 'Y'
  1092. ) AS SIZES /*사이즈*/
  1093. , FORMAL_GB
  1094. , REG_DT
  1095. , NUMB
  1096. -- <choose>
  1097. -- <when test="custNo != null and custNo > 0"> <!-- 로그인 했으면 -->
  1098. -- , IF(W.GOODS_CD IS NULL,'','likeit') AS LIKE_IT /*위시리스트담긴상품*/
  1099. -- </when>
  1100. -- <otherwise>
  1101. -- , '' AS LIKE_IT /*위시리스트담긴상품*/
  1102. -- </otherwise>
  1103. -- </choose>
  1104. FROM TAB_ALL_GOODS G
  1105. LEFT OUTER JOIN TAB_GOODS_IMG GI ON G.GOODS_CD = GI.GOODS_CD
  1106. -- LEFT OUTER JOIN TAB_GOODS_VIDEO GV ON G.GOODS_CD = GV.GOODS_CD
  1107. -- <if test="custNo != null and custNo > 0"> <!-- 로그인 했으면 -->
  1108. -- LEFT OUTER JOIN TB_WISHLIST W ON G.GOODS_CD = W.GOODS_CD
  1109. -- AND W.CUST_NO = #{custNo}
  1110. -- </if>
  1111. ;