2012-11-15 12 views
0

내가 다음 코드가 :케이스를 사용하는 경우 다음

COUNT (DISTINCT CASE WHEN (a.FIRST_ORDER_DAY = b.ORDER_DAY) THEN a.CUSTOMER_ID END) AS new_customer 

는 내가 선택 기능 대신 카운트 기능과 동일한 동작을 복제 할를. 내가 충분히 기능을 모른다, 나는 방법을 모른다 :

는 결과가 있었다를 미리

"새로운 고객을 X", 즉

지금 내가 될 결과를 갖고 싶어

new customers: 
123 (customer ID) 
234 (another customer iD) 

등등.

귀하의 도움에 감사드립니다.

+1

테이블을 어떻게 정의합니까? 당신의 미리보기에는'count()'가 없습니다. 완전한 진술을 보여주십시오. 더 많은 관련 정보가 더 나은 답변을 제공합니다. –

+0

"카운트 기능이 아닌"이란 무엇입니까? 귀하의 예제는 'COUNT'를 사용하지 않습니다 ... –

+0

@ChrisMoutray - OP가 코드 조각을 복사하여 붙여 넣으려고했지만'COUNT' 부분을 놓친 것 같습니다. 그래서 CASE 문은()로 묶여 있습니다. – MatBailie

답변

2

내가 이해 한 바로는 새로운 고객 ID 목록 만 있으면됩니다.

는 들어

SELECT DISTINCT 
    a.CustomerID 
FROM 
    ??? 
WHERE 
    a.FIRST_ORDER_DAY = b.ORDER_DAY 

???는 당신이 이 (그러나 귀하의 질문에 포함하지 않았다) 조인 무엇으로 대체해야 ... 전혀 CASE 문을 필요하지 않습니다.

+0

무언가를 주문한 모든 고객을 끌어낼 수 없습니까? 오더가 저장된 테이블이 정리되지 않는다면 오탐 (false positive)이 많이 발생하는 것처럼 보입니다. –

+0

안녕하세요, 죄송합니다. COUNT (DISTINCT CASE WHEN (a.FIRST_ORDER_DAY = b.ORDER_DAY) 그 다음 a.CUSTOMER_ID END) AS new_customer – user1820913

+0

@JoeW - OP가 제공 한 논리의 사본입니다. 나는'ORDER_DAY'가 가장 최근의 주문에만 관련이 있다고 생각한다. 따라서 'FIRST_ORDER_DAY'와 일치하면 가장 최근 주문이 첫 주문이므로 고객이 새 것입니다. 그러나 그것이 가정이다. 이 코드는 OP 코드가 세고있는 ID를 출력합니다. – MatBailie

관련 문제