sqlgoogle-bigquery

Creating a table inside this SQL when running from BigQuery


WITH
CATALOG_SKU_CTE AS (     
  SELECT A.sku    
  FROM `catalog-stage.catalog_enterprise_views.sku_hierarchy_view` A, `catalog-stage.catalog_enterprise_views.sku_v` B     
  WHERE A.sku = B.SKU  AND UPPER(B.group) = "MERCHANDISING"      
  AND UPPER(B.specification) = "NONCONFIGURABLE"      
  AND UPPER(B.classification) IN ("LUMBER","NORMAL") 

  -- ====================================

), 

-- Get all current stores and their markets 

STORE_CTE AS (     
  SELECT STR_NBR      
  FROM `assrtmgmt-stage.assrtmgmt.STR_CRDB_VIEW`     
  WHERE str_typ_ind = "N"     
  AND MKT_NBR <> 401 
), 

-- Create a list of SKU-store combinations for this triangulation 

SKU_STORE_CTE AS ( 
  SELECT A.SKU, B.STR_NBR    
  FROM CATALOG_SKU_CTE A, STORE_CTE B     
), 

-- ==================================== 

AC_CTE AS (     
  SELECT SKU, ASSORTED, LOCATION, STRATEGY     
  FROM `assrtmgmt-stage.AC_SHARED.product_assortment_commons_realtime`      
  WHERE UPPER(LOCATION_TYPE) = "STR" 
  AND SELLING_CHANNEL = 1     
), 
POG_PRODUCT_CTE AS (     
  SELECT DISTINCT SKU_NBR, DBKEY     
  FROM `spaceplanning-stage.SPACE_COMMONS.IX_SPC_PRODUCT_VIEW`       
  WHERE ACTV_FLG = true     
), MYASSORT_CTE AS (     
  SELECT DISTINCT A.sku_id, B.str_id     
    FROM `assrtmgmt-stage.myassort_strategy.stock_set_sku` A,      
    `assrtmgmt-stage.myassort_strategy.stock_set_str` B    
  WHERE A.set_id = B.set_id     
), 

-- Get list of SKU-store combinations from POG where the SKU-store is either on live a POG or a Pending POG 

POG_VIEW_CTE AS (     
  SELECT DISTINCT POG_SKUS.SKU_NBR, POG_STORES.STR_NBR     
  FROM POG_PRODUCT_CTE POG_SKUS,      
      `spaceplanning-stage.SPACE_COMMONS.IX_SPC_PLANOGRAM_VIEW` POG,     
      `spaceplanning-stage.SPACE_COMMONS.IX_SPC_POSITION_VIEW` POG_POS,     
      `spaceplanning-stage.SPACE_COMMONS.THD_STORE_POG_ASSIGN_VIEW` POG_STORES     
  WHERE POG_SKUS.DBKEY = POG_POS.DBPARENTPRODUCTKEY     
  AND POG_POS.ACTV_FLG = true     
  AND POG_POS.DBPRNTPLANOGRAMKEY = POG.DBKEY     
  AND POG.ACTV_FLG = true     
  AND POG.DBKEY = POG_STORES.DBPARENTPLANOGRAMKEY     
  AND POG_STORES.FINISHEDDATE IS NULL     
  AND POG_STORES.ACTV_FLG = true 
)
         
-- Get list of SKU-store combinations from POG where the SKU-store is either on live a POG or a Pending POG     

-- =========================== 

-- MAIN QUERY 

-- =========================== 

SELECT     
  SSC.SKU AS `SKU`,     
  SSC.STR_NBR AS `Store`,     
  CASE      
    WHEN MA.sku_id is NULL THEN "N"     
    ELSE "Y"    
  END AS `MyAssortment`,     
  CASE      
    WHEN PVC.SKU_NBR is NULL THEN "N"     
    ELSE "Y"     
  END AS `POG`,     
  CASE      
    WHEN AC.ASSORTED IS NULL THEN "N"     
    WHEN UPPER(AC.ASSORTED) = "OFF" THEN "N"     
    WHEN UPPER(AC.STRATEGY) LIKE "%INACTIVE%" THEN "N"     
    WHEN UPPER(AC.STRATEGY) LIKE "%DELETE%" THEN "N"     
    WHEN UPPER(AC.STRATEGY) = "CLEARANCE" THEN "N"     
    ELSE "Y"       
  END AS `Assortment_Commons`     
FROM SKU_STORE_CTE SSC     
LEFT OUTER JOIN MYASSORT_CTE MA     
  ON SSC.SKU = MA.SKU_ID      
  AND SSC.STR_NBR = MA.STR_ID     
LEFT OUTER JOIN POG_VIEW_CTE PVC     
  ON SSC.SKU = PVC.SKU_NBR     
  AND SSC.STR_NBR = CAST(PVC.STR_NBR AS INT64)     
LEFT OUTER JOIN AC_CTE AC      
  ON SSC.SKU = AC.SKU     
  AND SSC.STR_NBR = AC.LOCATION 
  ORDER BY SSC.SKU, SSC.STR_NBR) ;

On the above query, I would like to create a new table from the below main select query.

When I add "CREATE or REPLACE TABLE stage.myassort.company_report as, it shows unrecognized keyword "CREATE". How do I create a new table from this select query?

-- =========================== 

-- MAIN QUERY 

-- =========================== 
CREATE or REPLACE TABLE `stage.myassort.company_report` as
SELECT     
  SSC.SKU AS `SKU`,     
  SSC.STR_NBR AS `Store`,    
  CASE      
    WHEN MA.sku_id is NULL THEN "N"     
    ELSE "Y"     
  END AS `MyAssortment`,     
  CASE      
    WHEN PVC.SKU_NBR is NULL THEN "N"     
    ELSE "Y"     
  END AS `POG`,     
  CASE      
    WHEN AC.ASSORTED IS NULL THEN "N"     
    WHEN UPPER(AC.ASSORTED) = "OFF" THEN "N"     
    WHEN UPPER(AC.STRATEGY) LIKE "%INACTIVE%" THEN "N"     
    WHEN UPPER(AC.STRATEGY) LIKE "%DELETE%" THEN "N"     
    WHEN UPPER(AC.STRATEGY) = "CLEARANCE" THEN "N"     
    ELSE "Y" 

Solution

  • Try to put `CREATE OR REPLACE TABLE ... AS` before your query.

    CREATE OR REPLACE TABLE your_dataset.your_table AS
    WITH my_cte AS (
    SELECT ... 
    )
    SELECT * FROM my_cte;
    

    This keeps your query the same, but saves the result into a table.