Есть процедура, которая получает необходимые данные, а затем вставляет их в таблицу:
Возможно ли иметь параметр, который приводит к определенному условию фильтра, как я могу этого добиться?
Например, создав новый параметр с именем condition
, что если пользователь введет 1, процедура будет использовать фильтр 1 и т. д.
см. пример кода ниже:
CREATE OR REPLACE PROCEDURE `peterwu.UDP_mem_profile_package`
(table_name STRING
, title_name STRING
, status_start_dt DATE
, status_end_dt DATE)
BEGIN
-- 2. insert data
EXECUTE IMMEDIATE format("""
INSERT INTO `peterwu..UDP_OUTPUT_mem_profile_aggregated`
(TITLE, GROUP_ORDER, GROUP_ID1, GROUP_NAME, MEM_CNT, TKT, SALES)
SELECT @title_name
, 5
, COUNT(DISTINCT MEM_ID) MEM_CNT
, COUNT(DISTINCT CASE WHEN IS_TICKET = 1 THEN TKT_NO END) AS TICKET
, SUM(retail_price_amt) SALES
FROM `peterwu.tlw_txn_since_2017`
WHERE TRANS_DT BETWEEN @start_dt AND @end_dt
AND MEM_ID IN (SELECT MEM_ID FROM `"""||table_name||"""`)
/*========== FILTER CONDITION CONTROLED BY USER INPUT: FILTER 1 OR FILTER 2=========*/
-- FILTER 1 --
AND
(
SITE_ID BETWEEN '1A01' AND '1A02' OR
SITE_ID BETWEEN '1A03' AND '1A04'
)
AND
-- FILTER 2 --
(
SITE_ID BETWEEN '1S01' AND '1S02' OR
SITE_ID BETWEEN '1S03' AND '1S04'
)
""")
USING status_start_dt as start_dt
, status_end_dt as end_dt
, title_name as title_name;
END
вот мой пример кода, который пытается сделать то, что вы хотите.
в основном, чтобы ответить на ваш вопрос, можно использовать условное выражение, оцениваемое в предложении where. здесь я предположил, что входных условий два, и они могут быть назначены двум входным переменным и на основе которых может быть оценено предложение where.
CREATE OR REPLACE PROCEDURE myproject.zz_DataSet.procTest
( title_name STRING
, condition1 string
, condition2 string)
BEGIN
EXECUTE IMMEDIATE format ("""
INSERT INTO myproject.zz_DataSet.zzProcTest (TITLE_NAME)
SELECT firstname
FROM myproject.zz_DataSet.tblOne
WHERE "condition1" = if (@c1 is null,@c2 ,@c1)
"""
)
USING condition1 as c1,
condition2 as c2;
END;
вот мой вызов процедуры. в этом случае условие 1 оценивается как истинное и, следовательно, вставляет условие1 в таблицу tblOne. надеюсь это поможет
call myproject.zz_DataSet.procTest("condition1","condition1","")
Привет @Pete, ответ ниже помог вам в решении проблемы?