Как я мог иметь несколько значений для переменной или массива - PullRequest
0 голосов
/ 03 мая 2019

У меня есть рабочий запрос ниже.однако мне нужно сделать OWNRSHP_ID переменной, которую я могу предоставить список OWNRSHP_ID для запуска по запросу один за другим.

Идея состоит в том, чтобы иметь переменную, в которой я могу предоставить список идентификаторов, и запрос будет проходить через каждый из них по одному.

Этот SQL-код, который я сейчас выполняю в Teradata.

Select distinct
 inv_corp.OWNRSHP_ID 
,SE.Sending_entity_nm AS Bottler
,snap.FSH_DSTR_OWNRSHP_ID AS DELIVERY_SOURCE
,inv_corp.BTLR_DLVR_PNT_NO AS BTLR_DLVR_PNT_NO
,snap.DLVR_PNT_NM AS BTLR_DLVR_PNT_NM
,snap.CHNL_TYPE_DESC AS MARKET_TYPE
,snap.TRADE_CHNL_DESC AS TRADE_CHNL_DESC
,snap.TCCC_SUB_CHNL_NM AS TCCC_SUB_CHNL_NM
,snap.STATE AS STATE

,CASE   
                WHEN cbs.CBS_BUSINESS_TYPE = 1 THEN 'TRADE SALE' 
                WHEN cbs.CBS_BUSINESS_TYPE = 4 THEN 'FULL SERVE' 
                WHEN cbs.CBS_BUSINESS_TYPE = 5 THEN 'EXTRNL SLS' 
                ELSE NULL 
            END AS CBS_BUSINESS_TYPE 
,ptype.PRD_TYP_NM AS PROD_TYPE
,cal.CUR_YR_AC_PRD AS CAL_YEAR_MONTH
--,cal.CUR_YR_AC_PRD AS CAL_YEAR_MONTH
,inv_corp.Inv_dt

,sum(CASE   
                WHEN (qty) IS NOT NULL THEN (qty* TCCC_192CONV(FLOAT)) 
                ELSE 0 
    END )AS VolEQ   --20 fields

 ,sum(CASE    
                WHEN (qty) IS NOT NULL THEN (cast(qty as FLOAT )* cast(prodet.STD_ADJ_FCT as FLOAT)) 
                ELSE 0 
    END) AS VolStd 



,(sum(Whlsl_Price_Xtnd) - sum(Off_Inv_Cma_Disc))  - (sum(Off_Inv_Ctm_Disc) - sum(On_Inv_Disc) ) as DNSI



FROM CORP_LINES_VIEWS.LINE_CORP line_corp
join corp_invoice_VIEWS.invoice_corp  inv_corp
On line_corp.Tsr_Inv_Ref_No = inv_corp.Tsr_Inv_Ref_No
  and  line_corp.OWNRSHP_ID = inv_corp.OWNRSHP_ID

 Join CBS_VIEWS.CBS_DELIVERY_POINT cbs 
   ON inv_corp.BTLR_DLVR_PNT_NO  = cbs.BTLR_DLVR_PNT_NO
   and inv_corp.OWNRSHP_ID = cbs.OWNRSHP_ID

   Join CHR_VIEWS.DPT_SNAPSHOT_SELECT snap
   ON inv_corp.BTLR_DLVR_PNT_NO  = snap.BTLR_DLVR_PNT_NO
  and inv_corp.OWNRSHP_ID = snap.OWNRSHP_ID 

  Join CBS_VIEWS.sending_entity se
  ON inv_corp.OWNRSHP_ID = se.OWNRSHP_ID

  Join NSR_VIEWS.PRODET prodet
  ON prodet.cce_material_no = line_corp.cce_material_no

  Join DLCCC_CUST_CNTC_CNTR_LAB.TBL_3PY_to_YTD_CAL cal
  ON CAL.fact_dt = line_corp.Inv_dt
Join CORP_LINES.MATL_JOIN_KEY mkey
   ON mkey.cce_material_no = line_corp.cce_material_no
  and  mkey.OWNRSHP_ID = line_corp.OWNRSHP_ID  

  Join IWR_VIEWS.MN_PROD_TYPE ptype
  ON ptype.tsr_prd_typ = prodet.tsr_prd_typ




Where 1=1 
and line_corp.inv_dt>'2018-01-01'  
and line_corp.OWNRSHP_ID IN (10,55,75,110,65,85,95) 

GROUP BY 
 inv_corp.OWNRSHP_ID 
,SE.Sending_entity_nm 
,snap.FSH_DSTR_OWNRSHP_ID 
,inv_corp.BTLR_DLVR_PNT_NO
,snap.DLVR_PNT_NM 
,snap.CHNL_TYPE_DESC 
,snap.TRADE_CHNL_DESC
,snap.TCCC_SUB_CHNL_NM 
,snap.STATE 
,cbs.CBS_BUSINESS_TYPE 
,ptype.PRD_TYP_NM 
,cal.CUR_YR_AC_PRD 
,inv_corp.Inv_dt

1 Ответ

0 голосов
/ 03 мая 2019

Ну, вы в настоящее время предоставляете список OWNRSHP_IDs в

and line_corp.OWNRSHP_ID IN (10,55,75,110,65,85,95)

Но, если вы хотите передать этот список как строку, разделенную запятыми, вы можете применить STRTOK_SPLI_TO_TABLE

and line_corp.OWNRSHP_ID IN
 (
   SELECT Cast(token AS INT) AS OWNRSHP_ID, tokennum
   FROM TABLE (StrTok_Split_To_Table(1, :OWNRSHP_IDs, ',')
        RETURNS (outkey INTEGER,
                 tokennum INTEGER,
                 token VARCHAR(20) CHARACTER SET Unicode)
              ) AS d 
 )

Если вы переместите это в производную таблицу, вы можете даже упорядочить по позиции идентификатора во входной строке:

...
Join IWR_VIEWS.MN_PROD_TYPE ptype
ON ptype.tsr_prd_typ = prodet.tsr_prd_typ
JOIN 
 (
   SELECT Cast(token AS INT) AS OWNRSHP_ID, tokennum
   FROM TABLE (StrTok_Split_To_Table(1, :OWNRSHP_IDs, ',')
        RETURNS (outkey INTEGER,
                 tokennum INTEGER,
                 token VARCHAR(20) CHARACTER SET Unicode)
              ) AS d 
 ) as dt
ON inv_corp.OWNRSHP_ID = dt.OWNRSHP_ID
...
ORDER BY tokennum;

А когда вы выполняете внешнее соединение с производной таблицей, вы также можете вернуть пустую строку для отсутствующего идентификатора, но для этого, вероятно, потребуются некоторые дополнительные изменения в вашем запросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...