Re: [SQL ] 相同欄位兩條件

作者: smlboby (波比)   2014-03-16 16:29:11
※ 引述《YaMeiLo (亞妹露~!!)》之銘言:
: ※ 引述《Falconeye (未識綺羅香)》之銘言:
: : 兩個欄位如下:
: : customer_id product_code
: : 1 VF081
: : 1 VF082
: : 2 VF081
: : 2 VF082
: : 3 VF081
: : 4 VF081
: : 4 VF081
: : 請教,要如何算出同時有VF081跟VF082的customer數量?
: : 即id=1,2是符合條件的,答案為2筆
: : 謝謝
: CREATE TABLE #TEMP (customer_id int, product_code varchar(10))
: INSERT INTO #TEMP VALUES (1,'VF081')
: ……
: INSERT INTO #TEMP VALUES (4,'VF081')
: SELECT customer_id FROM (
: SELECT DISTINCT customer_id ,product_code
: FROM #TEMP
: WHERE product_code in ('VF081' ,'VF082')
: ) AS RESULT
: GROUP BY customer_id
: HAVING COUNT(customer_id) = 2;
: 先排除重複資料 => 同 customer_id 與 product_code ,
: 再列出符合條件 => COUNT(customer_id) = 2 。
: 如果 product_id 很多個, WHERE 後面刪掉並調整 COUNT 條件也可。
這樣可以嗎 ?
SELECT customer_id
FROM table
WHERE product_code IN ('VF081','VF082')
GROUP BY customer_id
HAVING ABS(SUM(CASE WHEN product_code = 'VF081' THEN 1 ELSE -1 END)) <> COUNT(*)
作者: YaMeiLo (亞妹露~!!)   2014-03-16 17:25:00
還滿酷的寫法,我一開始是直接想很多個product怎麼辦如果product來自於其它表,WHERE IN 和 COUNT 的 比較值就可以再用同一個子查詢

Links booklink

Contact Us: admin [ a t ] ucptt.com