2012-08-31 1 views
3

안녕하세요 나는 쉼표의 Product_ID 다음과 같이 내가 쿼리를 생성 한 Brand & Cust_ID쿼리에서 쉼표로 구분 된 값을 얻는 방법은 무엇입니까?

에 의해 그룹과 분리하려면이 테이블에서는 호출 테이블 tbdSales

Brand  Cust_ID Prd_ID 

Aftron 44301 T3485 
Aftron 44301 T0628 
Aftron 44301 T2952 
Aftron 44301 T1958 
Aftron 44302 T1940 
Aftron 44302 T1939 
Aftron 44303 T2419 
Aftron 44303 T2045 

있습니다

SELECT DISTINCT 
     Brand 
    , Cust_ID 
    , (
     SELECT DISTINCT second_id + ', ' 
     FROM tbdSales t2 
     WHERE t2.Brand = t1.Brand AND t2.Cust_ID = t1.Cust_ID 
     FOR XML PATH('') 
    ) AS prd_ID into SalReport 
FROM tbdSales t1 
GROUP BY Brand,Cust_ID 

위 쿼리는 결과를 제공합니다. 그러나 레코드가 더 많으면 (5 분) 많은 시간이 소요됩니다.

쿼리 완료 시간을 줄이려면 다른 방법을 알려주십시오.

+0

'CONCAT' 통합기를 사용해보십시오. –

+3

Brand 및 cust_id 열에 대한 색인이 있습니까? – hgulyan

+0

아니요 내가 가지고 있지 않습니다 – user1632718

답변

1

시도해보십시오. SQLFiddle example. recursive query with CTE을 사용합니다. 빠른 결과를 위해 당신이 브랜드, CUST_ID, PRD_ID에 인덱스가 필요합니다

with t2 as 
(select t0.*, 
    row_number() over (partition by Brand,Cust_id order by Prd_id asc) G_id 
    from 
(
    select distinct Brand,Cust_id,Prd_id from tbdSales 
) t0 

), 
    t1 as (
    select t.*, 
      cast(Prd_id as varchar(max)) as m2 
    from t2 t where g_id=1 

union all 
select b.*, 
     cast(c.m2+','+b.Prd_id as varchar(max)) as m2 
    from t2 b 
     inner join t1 c 
      on (c.g_id+1 = b.G_id) 
       and (b.Brand=c.Brand) 
       and (b.Cust_id=c.Cust_Id) 


) 
    select brand,cust_id,M2 as Prd_id from 
    (
    select t1.*, 
     row_number() over (partition by Brand,Cust_id order by g_id desc) rn 
      from t1 
) t3 where rn=1 
order by Brand,Cust_id 
+0

안녕하세요. 재생 해 주셔서 감사합니다. 위의 쿼리를 사용하여 결과를 얻을 수 있지만 여전히 타이밍이 동일합니다 – user1632718

+0

결과를 빨리 얻으려면 인덱스를 만들어야합니다. 예 : 'CREATE INDEX Idx_tbdSales_Brand ON tbdSales (브랜드); CREATE INDEX Idx_tbdSales_Cust_ID ON tbdSales (Cust_ID); CREATE INDEX Idx_tbdSales_Prd_ID ON tbdSales (Prd_ID); ' – valex

0
SELECT distinct brand, Cust_ID, Replace(Replace(Replace(
          ( select t2.Prd_ID 
           from @Sales as t2 
           where t2.brand = t1.brand and t2.Cust_ID = t1.Cust_ID 
           For XML Raw) 
           , '"/><row Prd_ID="', ', ') 
           , '<row Prd_ID="', '') 
           , '"/>', '') FROM @Sales t1 

안녕하세요, 이것을보십시오.

+0

안녕하세요. 재생 해 주셔서 감사합니다. 위의 쿼리를 사용하여 결과를 geting 오전하지만 여전히 타이밍 같은 문제입니다. – user1632718

관련 문제