2014-11-28 2 views
0

나는 고객이 한 전화의 결과와 고객을 위해 작성한 제안 등을 반환하는 쿼리를 가지고있다. 그 특정 날짜에 대한 그룹화는 ...SQL : concat()에 의한 그룹 사용

는하지만 지금 내가 lead_idcuncat(lead_id,timecreatredFormat)에 의해 그룹화 시도 고객의 수는 여전히 데이터 불일치 아래

가 찾으려는 것은 내가 미리

select 
    sum(t.enquiry_cnt), 
    sum(t.suggested_cnt), 
    sum(t.tot_cnt) 

from 
    (select 

     case 
       when source = 1 then 1 
       else 0 
      end enquiry_cnt, 

      case 
       when source = 6 then 1 
       else 0 
      end suggested_cnt, 
      case 
       when (source = 1 || source = 6) then 1 
       else 0 
      end tot_cnt, 
      date_format(timecreated, '%d-%b-%Y') created_time, 
      lead_id,timecreated 
    from 
     mg_lead_suggested_listing group by concat(created_time,lead_id) ) t 
group by t.created_time 
order by t.timecreated desc 
limit 10; 

감사를 시도 쿼리입니다

+0

** group을 lead_id, DATE (timecreated) **로 사용할 수 없습니까? – StanislavL

+0

쿼리 및 필요한 출력 형식에 사용되는 테이블의 구조를 게시 할 수 있다면 도움이됩니다. concat (created_time, lead_id)로 그룹을 제거하고 select에 COUNT (t.lead_id)를 추가하십시오. 그것은 작동 할 수 있습니다 – Sandeep

+0

당신의 상환에 감사합니다 @ StanislavL : 그것은 작동하지 않지만 어떤 경우에는 작동하지 않는 경우도 있습니다. @Sandeep : 테이블의 게시 구조를 시도합니다 참고 COUNT (t.lead_id) in select 작동 becz 내가 특정 조건에 의해 계산을 해야하는 경우 –

답변

0

다음 쿼리가 올바른지 확인하십시오. 고객 수를 얻기 위해 COUNT (DISTINCT t.lead_id)를 추가했습니다.

DECLARE @TEMP TABLE 
(
    [source] INT, 
    lead_id INT, 
    timecreated DATETIME 
) 

INSERT INTO @TEMP VALUES (1,1,GETDATE()) 
INSERT INTO @TEMP VALUES (6,1,GETDATE()) 
INSERT INTO @TEMP VALUES (6,1,GETDATE()) 
INSERT INTO @TEMP VALUES (1,2,DATEADD(d,-1,GETDATE())) 
INSERT INTO @TEMP VALUES (1,1,DATEADD(d,-1,GETDATE())) 
INSERT INTO @TEMP VALUES (1,1,DATEADD(d,-1,GETDATE())) 


SELECT 
    CAST(t.timecreated AS DATE) [date], 
    SUM(t.enquiry_cnt) enquiry_cnt, 
    (SELECT COUNT(DISTINCT lead_id) FROM @TEMP WHERE CAST(timecreated AS DATE) = CAST(t.timecreated AS DATE) AND [source] = 1) as lead_enquiry_cnt, 
    SUM(t.suggested_cnt) suggested_cnt, 
    (SELECT COUNT(DISTINCT lead_id) FROM @TEMP WHERE CAST(timecreated AS DATE) = CAST(t.timecreated AS DATE) AND [source] = 6) as lead_suggested_cnt, 
    SUM(t.tot_cnt) tot_cnt, 
    COUNT(t.lead_id) as lead_cnt 
FROM 
(
    SELECT 
     CASE 
      WHEN [source] = 1 THEN 1 
      ELSE 0 
     END enquiry_cnt, 
     CASE 
      WHEN [source] = 6 THEN 1 
      ELSE 0 
     END suggested_cnt, 
     CASE 
      WHEN ([source] = 1 OR [source] = 6) THEN 1 
      ELSE 0 
     END tot_cnt, 
     lead_id, 
     timecreated 
    FROM 
     @TEMP 
    ) AS t 
group by 
    CAST(t.timecreated AS DATE) 
order by 
    [date] desc 
+0

: 감사합니다하지만 나는 enquiry_cnt에 얼마나 많은 고객이 거기에 있길 원하나요? 즉, enquirers 10 명이있는 경우 egg에 대한 enquiry_cnt 아래에 얼마나 많은 고유 id lead_id가 있는지 묻습니다. 나는 2로 카운트를 바란다 희망을 가지고있다. 어쨌든 좋은 일을한다. :-) –

+0

@ManjuKb 선택에 새로운 필드를 추가했다. – Sandeep

+0

+2 고마워 .-) –