SQL with R_Markdown

Chapter 1.

Load Library

library(DBI)
library(odbc)
library(dplyr)

MS-SQL Connect

# MS SQL서버 연결
con109 <- dbConnect(odbc::odbc(),
                     Driver   = "ODBC Driver 17 for SQL Server",  # MSSQL용 드라이버
                     Server   = "211.106.159.109",                # 서버 이름
                     Database = "PDANADB",                        # 데이터베이스 이름
                     UID      = "lbsadmin",                       # 사용자 이름
                     PWD      = "Embrain3**9",                    # 비밀번호
                     Port     = 1433)    

con113 <- dbConnect(odbc::odbc(),
                     Driver   = "ODBC Driver 17 for SQL Server",  # MSSQL용 드라이버
                     Server   = "211.106.159.113",                # 서버 이름
                     Database = "PDVISDB",                        # 데이터베이스 이름
                     UID      = "spuser",                         # 사용자 이름
                     PWD      = "tyvldvosjf",                     # 비밀번호
                     Port     = 1433)  

SQL Query Test

Q1 <- "
  WITH CTE_PRODUCT AS (
                        select PP.PACKAGE_PRODUCT_ID AS PRODUCTID
                        FROM MST_PRODUCT_PACKAGE AS PP
                        
                        INNER JOIN MST_PRODUCT AS MP ON PP.CHILD_PRODUCT_ID = MP.PRODUCT_ID
                        
                        INNER JOIN (SELECT * FROM MST_PRODUCT_VALUE_ITEM WHERE VARIABLE = 'V_2_28') AS PVI
                        ON PVI.TARGET_VARIABLE = MP.PRODUCT_ID
                        
                        WHERE MP.KANCLASS_CODE = '21170102'
                        AND PVI.VALUE = '001'
                        
                        UNION
                        
                        SELECT MP.PRODUCT_ID
                        FROM MST_PRODUCT AS MP 
                        
                        INNER JOIN (SELECT * FROM MST_PRODUCT_VALUE_ITEM WHERE VARIABLE = 'V_2_28') AS PVI
                        ON PVI.TARGET_VARIABLE = MP.PRODUCT_ID
                        
                        WHERE MP.KANCLASS_CODE = '21170102'
                        AND PVI.VALUE = '001'
                        AND MP.GUBUN = 'S'
                        
  )
  SELECT TOP 10 *
  FROM CTE_PRODUCT AS CP 
  
  INNER JOIN MST_PRODUCT AS MP
  ON MP.PRODUCT_ID = CP.PRODUCTID
  
  INNER JOIN MST_PRODUCT_SKU AS PS 
  ON MP.SKU_CODE = PS.SKU_CODE
  
  WHERE MP.IS_USED = 1 AND MP.IS_CLEANSED = 1
"    

R1 <- dbGetQuery(con109, Q1)
print(R1[1:10, ])
##    PRODUCTID PRODUCT_ID SKU_CODE COMPANY_CODE KANCLASS_CODE BRAND_CODE
## 1       4223       4223 SKU_1854       C17354      21170102   B0000639
## 2       8088       8088 SKU_3044       C12254      21170102   B0000895
## 3       8089       8089 SKU_3038       C12254      21170102   B0000895
## 4       8091       8091 SKU_3039       C12254      21170102   B0000895
## 5       8092       8092 SKU_3045       C12254      21170102   B0000895
## 6       8093       8093 SKU_3041       C12254      21170102   B0000895
## 7       8094       8094 SKU_3040       C12254      21170102   B0000895
## 8    1129433    1129433 SKU_3797       C13438      21170102   B0000853
## 9    1129437    1129437 SKU_3802       C13438      21170102   B0000853
## 10   1129438    1129438 SKU_3807       C13438      21170102   B0000853
##    COMPANY_BRAND_CODE GUBUN VOLUME VOLUME_UNIT SUB_BRAND IS_USED
## 1     C17354_B0000639     S    793           G      <NA>    TRUE
## 2     C12254_B0000895     S    794           G      <NA>    TRUE
## 3     C12254_B0000895     S   1700           G      <NA>    TRUE
## 4     C12254_B0000895     S    794           G      <NA>    TRUE
## 5     C12254_B0000895     S    794           G      <NA>    TRUE
## 6     C12254_B0000895     S    794           G    오레오    TRUE
## 7     C12254_B0000895     S   1700           G    오레오    TRUE
## 8     C13438_B0000853     S    245           G      <NA>    TRUE
## 9     C13438_B0000853     S    260           G      <NA>    TRUE
## 10    C13438_B0000853     S    750           G      <NA>    TRUE
##           DATE_CREATED         DATE_OPENED IS_CLEANSED SKU_CODE
## 1  2023-03-14 14:12:36 2023-03-14 14:12:36        TRUE SKU_1854
## 2  2023-03-14 14:12:36 2023-03-14 14:12:36        TRUE SKU_3044
## 3  2023-03-14 14:12:36 2023-03-14 14:12:36        TRUE SKU_3038
## 4  2023-03-14 14:12:36 2023-03-14 14:12:36        TRUE SKU_3039
## 5  2023-03-14 14:12:36 2023-03-14 14:12:36        TRUE SKU_3045
## 6  2023-03-14 14:12:36 2023-03-14 14:12:36        TRUE SKU_3041
## 7  2023-03-28 18:04:42 2023-03-28 17:13:58        TRUE SKU_3040
## 8  2023-03-14 14:12:36 2023-03-14 14:12:36        TRUE SKU_3797
## 9  2023-03-14 14:12:36 2023-03-14 14:12:36        TRUE SKU_3802
## 10 2023-03-14 14:12:36 2023-03-14 14:12:36        TRUE SKU_3807
##                                                     SKU_NAME IS_USED
## 1  글로벌와이케이 빌라빅토리아 냉동밀또띠아 10인치 냉동 793G    TRUE
## 2             서영이앤티 필라델피아치즈케익 클래식 냉동 794G    TRUE
## 3                   서영이앤티 필라델피아치즈케익 냉동 1700G    TRUE
## 4       서영이앤티 필라델피아치즈케익 라즈베리스월 냉동 794G    TRUE
## 5               서영이앤티 필라델피아치즈케익 터틀 냉동 794G    TRUE
## 6             서영이앤티 필라델피아치즈케익 오레오 냉동 794G    TRUE
## 7            서영이앤티 필라델피아치즈케익 오레오 냉동 1700G    TRUE
## 8     에스에이치에스 파스키에 바닐라라즈베리케이크 냉동 245G    TRUE
## 9                   에스에이치에스 파스키에 오페라 냉동 260G    TRUE
## 10                    에스에이치에스 파스키에 플란 냉동 750G    TRUE
##           DATE_CREATED
## 1  2023-05-02 10:33:48
## 2  2023-05-02 10:33:48
## 3  2023-05-02 10:33:48
## 4  2023-05-02 10:33:48
## 5  2023-05-02 10:33:48
## 6  2023-05-02 10:33:48
## 7  2023-05-02 10:33:48
## 8  2023-05-02 10:33:48
## 9  2023-05-02 10:33:48
## 10 2023-05-02 10:33:48
Q2 <- "
      SELECT 
      DISTINCT PC.PRODUCTID
      ,PC.PRODUCTCODE
      ,PC.PRODUCTNAME
      ,PC.KANCLASSCODE_NEW
      ,CT.CLASSNAME4 AS CLASSNAME4_NEW
      ,PC.CONAMEK
      ,PC.NPNAME
      FROM PURCHASE AS P
      
      INNER JOIN PURCHASEDETAIL AS PD
      ON PD.RECEIPT_ID = P.RECEIPT_ID
      
      INNER JOIN PRODUCT AS PC 
      ON PC.PRODUCTID = PD.PRODUCTID
      
      LEFT JOIN PRODUCTCATEGORY AS CT
      ON CT.KANCLASSCODE = PC.KANCLASSCODE_NEW
      
      WHERE P.RECEIPT_DATE BETWEEN '2022-01-01' AND '2024-06-30'
      AND PC.KANCLASSCODE_NEW IN ('21120308')
"

R2 <- dbGetQuery(con113, Q2)
print(R2[1:10, ])
##    PRODUCTID   PRODUCTCODE                                        PRODUCTNAME
## 1    1492164 8801007231969        씨제이제일제당 크레잇 꼬마핫도그 냉동 1250G
## 2    1494022 8801007539010      씨제이제일제당 고메 크리스피핫도그 냉동 80G*6
## 3    1494879 8801007678702  씨제이제일제당 고메 치즈크리스피핫도그 냉동 85G*5
## 4    1495526 8801007779775 씨제이제일제당 고메 치즈크리스피핫도그 냉동 85G*10
## 5    1495565 8801007785547   씨제이제일제당 고메 빅크리스피핫도그 냉동 130G*4
## 6    1495801 8801007825335 씨제이제일제당 고메 포테이토치즈핫도그 냉동 100G*4
## 7    1526247 8801045750408            오뚜기 맛있는 오리지널핫도그 냉동 80G*5
## 8    1526248 8801045750415                오뚜기 맛있는 치즈핫도그 냉동 80G*5
## 9    1526249 8801045750422            오뚜기 맛있는 할라피뇨핫도그 냉동 80G*5
## 10   1533875 8801047338048                     동원F&B 컨트리핫도그 냉동 250G
##    KANCLASSCODE_NEW CLASSNAME4_NEW        CONAMEK                    NPNAME
## 1          21120308       핫도그류 CJ제일제당(주)     쉐프솔루션 꼬마핫도그
## 2          21120308       핫도그류 CJ제일제당(주)       고메 크리스피핫도그
## 3          21120308       핫도그류 CJ제일제당(주)   고메 치즈크리스피핫도그
## 4          21120308       핫도그류 CJ제일제당(주) 고메 치즈 크리스피 핫도그
## 5          21120308       핫도그류 CJ제일제당(주)    고메 빅 크리스피핫도그
## 6          21120308       핫도그류 CJ제일제당(주)   고메 포테이토치즈핫도그
## 7          21120308       핫도그류     (주)오뚜기     맛있는 오리지널핫도그
## 8          21120308       핫도그류     (주)오뚜기         맛있는 치즈핫도그
## 9          21120308       핫도그류     (주)오뚜기    맛있는 할라피뇨 핫도그
## 10         21120308       핫도그류    (주)동원F&B              컨트리핫도그

DB Disconnect

# DB 연결해제
dbDisconnect(con109)
dbDisconnect(con113)

Chapter 2.

Data handling

Extract Product ID
# Productname 컬럼에서 핫도그를 포함하고 있는 productid 추출 후 상위 10개만 출력
d1 <- as.data.frame(subset(R2, grepl("핫도그", PRODUCTNAME, ignore.case = TRUE))[,1])
colnames(d1) <- c('Product_id')
head(d1, 10) 
##    Product_id
## 1     1492164
## 2     1494022
## 3     1494879
## 4     1495526
## 5     1495565
## 6     1495801
## 7     1526247
## 8     1526248
## 9     1526249
## 10    1533875