Попытка добавить синтаксис в существующий запрос (Custom SQL) - PullRequest
0 голосов
/ 16 июня 2020

Я пытаюсь добавить условие к существующему запросу SQL, но я не являюсь экспертом в SQL и прошу здесь помощи.

У меня есть запрос ниже SQL, и в настоящее время у меня есть PARNT_SLS_ORDER_LINE_KEY, который я вытягиваю для двух BUSINESS_UNIT_ID ('CSPBU', 'TMGBU'). В существующем запросе я пытаюсь добавить условие вроде:

Если PARNT_SLS_ORDER_LINE_KEY существует как в CSPBU, так и в TMGBU, то выводите или игнорируйте.

SELECT
BV_PRODUCTS.PRODUCT_ID,
BV_FISCAL_DAY_TO_YEAR.FISCAL_YEAR_NUMBER_INT,
BV_FISCAL_DAY_TO_YEAR.FISCAL_QUARTER_ID,


SUM(CASE WHEN DT_MT_RSTD_BKGS_MEASURE_IE_BE.SERVICE_FLG = 'N' THEN DT_MT_RSTD_BKGS_MEASURE_IE_BE.EXTENDED_QUANTITY*COALESCE(BV_BE_HIER_PRDT_FAM_ALLOC_INT.PRDT_FAMILY_ALLOCATION_PCT,1)*COALESCE(BV_BE_HIER_PRDT_FMLY_ALLOC_EXT.PRDT_FAMILY_ALLOCATION_PCT,1) ELSE 0 END) Quanity
,


sum(CASE WHEN DT_MT_RSTD_BKGS_MEASURE_IE_BE.SERVICE_FLG = 'N' THEN DT_MT_RSTD_BKGS_MEASURE_IE_BE.COMP_US_NET_PRICE_AMOUNT*COALESCE(BV_BE_HIER_PRDT_FAM_ALLOC_INT.PRDT_FAMILY_ALLOCATION_PCT,1)*COALESCE(BV_BE_HIER_PRDT_FMLY_ALLOC_EXT.PRDT_FAMILY_ALLOCATION_PCT,1) ELSE 0 END) Net_Price,
  BV_SALES_ORDER_LINE.PARNT_SLS_ORDER_LINE_KEY,
  BV_PRODUCTS.BUSINESS_UNIT_ID
FROM
  FINANCEBOBVDB.BV_PRODUCTS,
  FINANCEBOBVDB.BV_FISCAL_DAY_TO_YEAR,
  FINANCEBOBVDB.BV_BE_HIER_PRDT_FAMILY_ALLOC  BV_BE_HIER_PRDT_FAM_ALLOC_INT,
  FINANCEBOBVDB.BV_BE_HIER_PRDT_FMLY_ALLOC_EXT,
  ( 
  SELECT BV_MT_RSTD_BKGS_MEASURE.* , BV_FISCAL_DAY_TO_YEAR.FISCAL_YEAR_QUARTER_NUMBER_INT  ,
BV_FISCAL_DAY_TO_YEAR.CALENDAR_DATE
FROM FINANCEBOBVDB.BV_MT_RSTD_BKGS_MEASURE , FINANCEBOBVDB.BV_FISCAL_DAY_TO_YEAR 
WHERE BV_MT_RSTD_BKGS_MEASURE.BOOKINGS_PROCESS_DATE = BV_FISCAL_DAY_TO_YEAR.CALENDAR_DATE 
        AND BV_FISCAL_DAY_TO_YEAR.FISCAL_YEAR_MONTH_INT >= 201001
  )  DT_MT_RSTD_BKGS_MEASURE_IE_BE,
  BV_SALES_ORDER_LINE
WHERE
  ( BV_BE_HIER_PRDT_FAM_ALLOC_INT.ITEM_KEY=DT_MT_RSTD_BKGS_MEASURE_IE_BE.PRODUCT_KEY AND BV_BE_HIER_PRDT_FAM_ALLOC_INT.FISCAL_YEAR_QUARTER_NUMBER_INT=DT_MT_RSTD_BKGS_MEASURE_IE_BE.FISCAL_YEAR_QUARTER_NUMBER_INT  )
  AND  ( BV_BE_HIER_PRDT_FMLY_ALLOC_EXT.ITEM_KEY=DT_MT_RSTD_BKGS_MEASURE_IE_BE.PRODUCT_KEY AND BV_BE_HIER_PRDT_FMLY_ALLOC_EXT.FISCAL_YEAR_QUARTER_NUMBER_INT=DT_MT_RSTD_BKGS_MEASURE_IE_BE.FISCAL_YEAR_QUARTER_NUMBER_INT  )
  AND  ( DT_MT_RSTD_BKGS_MEASURE_IE_BE.BOOKINGS_PROCESS_DATE=BV_FISCAL_DAY_TO_YEAR.CALENDAR_DATE  )
  AND  ( BV_PRODUCTS.ITEM_KEY=DT_MT_RSTD_BKGS_MEASURE_IE_BE.PRODUCT_KEY  )
  AND  ( BV_SALES_ORDER_LINE.SALES_ORDER_LINE_KEY=DT_MT_RSTD_BKGS_MEASURE_IE_BE.DV_SALES_ORDER_LINE_KEY  )
  AND  ( DT_MT_RSTD_BKGS_MEASURE_IE_BE.PRODUCT_KEY  IN  ( SELECT ITEM_KEY FROM FINANCEBOBVDB.BV_PRODUCTS H    JOIN FINANCEBOBVDB.BV_IAM_TECHNOLOGY_GROUP_LINK S    ON H.TECHNOLOGY_GROUP_ID = S.TECHNOLOGY_GROUP_ID      WHERE cec_id='meramesh' AND IAM_LEVEL_NUM=1   )  )
  AND  ( DT_MT_RSTD_BKGS_MEASURE_IE_BE.DV_ATTRIBUTION_CD IN ('ATTRIBUTED','STANDALONE')  )
  AND  
  (

DT_MT_RSTD_BKGS_MEASURE_IE_BE.REVENUE_RECOGNITION_FLG  IN  ( 'Y'  )
   AND

BV_FISCAL_DAY_TO_YEAR.FISCAL_YEAR_NUMBER_INT  IN  ( 2018, 2019, 2020  )
   AND
   BV_PRODUCTS.BUSINESS_UNIT_ID  IN  ( 'cspbu', 'tmgbu'  )
  )
GROUP BY
  1, 
  2, 
  3, 
  6, 
  7

1 Ответ

0 голосов
/ 17 июня 2020

Как вы группируете свои строки - по product_id? Если вы хотите возвращать только строки, в которых заданный product_id имеет PARNT_SLS_ORDER_LINE_KEY с обоими значениями TMGBU и CSPBU, вы можете добавить это в конец вашего запроса:

QUALIFY 
  MAX(CASE PARNT_SLS_ORDER_LINE_KEY WHEN 'CSPBU' THEN 1 WHEN 'TMGBU' THEN 2 END) 
    OVER(PARTITION BY BV_PRODUCTS.PRODUCT_ID) <> 
  MIN(CASE PARNT_SLS_ORDER_LINE_KEY WHEN 'CSPBU' THEN 1 WHEN 'TMGBU' THEN 2 END) 
    OVER(PARTITION BY BV_PRODUCTS.PRODUCT_ID)

Попробуйте и дайте мне знать.

...