例如,如果我使用 listagg 并獲得輸出為 -
| 客戶ID | 利斯特格 |
|---|---|
| 一個 | (4, 6, 8, 9, 10) |
| 乙 | (3, 4, 6, 8, 1) |
| C | (1, 2, 4, 6, 9) |
| D | (2, 9, 10) |
如果我想列印/選擇其中包含 4 和 9 的行(即,在這種情況下為 A 和 C),我該怎么做?
uj5u.com熱心網友回復:
使用HAVING帶有條件聚合的子句:
select
customer_id,
listagg (something, ', ') within group (order by something) as lst
from mytable
group by customer_id
having max(case when something = 4 then 1 else 0 end) = 1
and max(case when something = 9 then 1 else 0 end) = 1
order by customer_id;
HAVING撰寫子句的另一種方法是使用COUNT:
having count(case when something = 4 then 1 end) > 0
and count(case when something = 9 then 1 end) > 0
uj5u.com熱心網友回復:
正如 JNevill 評論的那樣,您寧愿在聚合字串之前執行此操作。
不是很漂亮,但是 - 看看它是否有幫助。
SQL> with temp (customer_id, c_listagg) as
2 -- this is what your query returns
3 (select 'A', '(4, 6, 8, 9, 10)' from dual union all
4 select 'B', '(3, 4, 6, 8, 1)' from dual union all
5 select 'C', '(1, 2, 4, 6, 9)' from dual union all
6 select 'D', '(2, 9, 10)' from dual
7 )
8 -- match 9 (or 4) at the beginning, in the middle and at the end of C_LISTAGG
9 select customer_id
10 from temp
11 where ( c_listagg like '(9,%'
12 or c_listagg like '%, 9,%'
13 or c_listagg like '%, 9)')
14 and ( c_listagg like '(4,%'
15 or c_listagg like '%, 4,%'
16 or c_listagg like '%, 4)');
CUSTOMER_ID
-----------
A
C
SQL>
uj5u.com熱心網友回復:
您可以使用 OracleREGEXP_LIKE運算子的簡單模式匹配。如果匹配項(您的號碼)出現在Listagg列中,它會查找它:
- 前面有空格或左括號
[ (] - 后跟逗號或右括號
[,)]
SELECT *
FROM tab
WHERE REGEXP_LIKE(Listagg, '[ (]4[,)]')
AND REGEXP_LIKE(Listagg, '[ (]9[,)]')
在此處查看演示。
uj5u.com熱心網友回復:
您應該在聚合之前執行此操作;但是,如果你必須在之后這樣做:
SELECT customer_id,
your_listagg_value
FROM your_subquery
WHERE ', ' || your_listagg_value || ', ' LIKE '%, 4, %'
AND ', ' || your_listagg_value || ', ' LIKE '%, 9, %';
其中,對于樣本資料:
CREATE TABLE your_subquery (Customer_id, your_Listagg_value) AS
SELECT 'A', '4, 6, 8, 9, 10' FROM DUAL UNION ALL
SELECT 'B', '3, 4, 6, 8, 1' FROM DUAL UNION ALL
SELECT 'C', '1, 2, 4, 6, 9' FROM DUAL UNION ALL
SELECT 'D', '2, 9, 10' FROM DUAL;
輸出:
客戶ID YOUR_LISTAGG_VALUE 一個 4、6、8、9、10 C 1、2、4、6、9
注意:如果您有前括號和后括號(并且您的值是數字),則使用TRANSLATE( your_listagg_value, ',()', ',' ).
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/486960.html
上一篇:Swift組合從URLSession.shared.dataTaskPublisher回傳Int
下一篇:在sql查詢中決議utm引數
