1
問題:我有一份銷售報價列表,其中許多報價無效,因爲它們只是在實踐或培訓系統中。通常,引號名稱包含單詞「測試」或「虛擬」。 (在幾個例子中,quote_name包含'Prova' - 這恰好是'Test'的意大利語)。在LIKE或IN表達式中使用搜索模式列表
鑑於我無法輕鬆控制要搜索的字符串列表,我決定將該列表保留在第二個表格中 - 「要搜索的術語」。一個簡單的列表,其中包含術語列表('Test','Prova','Dummy',...)。
在亞馬遜紅移,我想一個簡單的CASE語句:
CASE WHEN UPPER(vx.quote_name) LIKE ('%' + UPPER(terms.term) + '%') THEN 'Y' ELSE 'N' END AS "Any DPS"
然而,這似乎只能得到該列表中的第一個搜索項。
此外,對於同一個報價,由於多個商品被出售,可能有多行,我通常會將一行設置爲'Y',其餘設置爲'N'。
我修改了語句:
---- #4a: get a list of the quotes whose quote_names match the patterns in the list
SELECT
vx.master_quote_number,
'Y' AS "Any DPS"
FROM t_quotes vx, any_dps_search_families terms
WHERE UPPER(vx.prod_fmly) IN ('%'+ UPPER(terms.term) +'%');
--- 4b: merge Any DPS results back in
select vx.*, dps."Any DPS"
from t_quotes vx
LEFT JOIN transform_data_4 dps ON (vx.master_quote_number = dps.master_quote_number)
但這並沒有這樣做無論是。
環境: Amazon Redshit(大部分類似Postgres)。 Postgres的答案是理想的。如果需要,我可以將此子句切換到MySQL,但我寧願不。
道歉予混合搜索表名稱 - 在步驟4a中它是術語和4b中我用「DPS」。同一個表 - transform_data_4是從4a開始的結果步驟,就像'select into'一樣。 –
我認爲Redshift是基於Postgres的一個非常舊的版本。相反,這裏給出的答案應該是專門針對Redshift的。 –
請顯示樣本輸入和預期輸出。 –