2016-07-07 3 views
0

2 개의 필드를 그룹화하고 첫 번째 2 개가 공통으로 갖고있는 다른 필드의 값을 연결 한 세 번째 필드를 반환하려고합니다. 제품 ID. 여기에 내 데이터입니다 :T-SQL 두 개의 필드로 그룹화하고 다른 문자를 연결하는 방법

ProductID Currency Price Territories 
1   USD  6.99 US 
1   EUR  6.99 GR, HU, LT 

내가 Currenty 및 가격 열을 뽑을 수 있지만, 공통점이 영토를 연결할 수 없습니다 : 나는 결과를 싶습니다

ProductID Currency Price Territory 
1   USD  6.99 US 
1   EUR  4.99 GR 
1   EUR  4.99 HU 
1   EUR  4.99 LT 
2   USD  7.99 US 
2   EUR  5.99 GR 
2   EUR  5.99 HU 

는 다음과 같이 돌아와서 :

SELECT Currency, Price 
FROM TerritoryPricing 
WHERE ProductID = 1 
GROUP BY Currency, Price 

영토를 어떻게 연결할 수 있습니까?

+0

구글 : "SQL 서버 집계 문자열 연결" –

+0

보면이 문서 http://stackoverflow.com/questions/3368942/grouped-string-aggregation-listagg-for-sql-server – are

+0

http://sqlperformance.com/2014/08/t-sql-queries/sql-server-grouped-concatenation –

답변

0

당신은에 SQL의 XML 처리를 사용할 수 있습니다 SQL 2000 이상의 연결된 목록 생성 :

create table #TerritoryPricing (ProductID int, Currency varchar(3), Price decimal(10,2), Territory varchar(2)) 
insert into #TerritoryPricing values (1,'USD',6.99,'US') 
insert into #TerritoryPricing values (1,'EUR',4.99,'GR') 
insert into #TerritoryPricing values (1,'EUR',4.99,'HU') 
insert into #TerritoryPricing values (1,'EUR',4.99,'LT') 
insert into #TerritoryPricing values (2,'USD',7.99,'US') 
insert into #TerritoryPricing values (2,'EUR',5.99,'GR') 
insert into #TerritoryPricing values (2,'EUR',5.99,'HU') 

SELECT Currency, Price, 
    SUBSTRING(
     (SELECT (',' + ltrim(rtrim(Territory))) 
     FROM #TerritoryPricing t2 
     WHERE t1.Currency = t2.Currency 
      and t1.Price = t2.Price 
      and ProductID = 1 
     ORDER BY t2.Territory 
     FOR XML PATH('') 
     ), 2, 8000) Territories 
FROM #TerritoryPricing t1 
WHERE ProductID = 1 
GROUP BY Currency, Price 
+0

정말 대단합니다. 고마워요. 내가 추가해야만 한 것은 WHERE 절에있는 "WHERE ProductID = 1"입니다. 감사! –

0

당신은 CONCAT를 사용할 수 있습니다

SELECT ProductID, Currency, Price, CONCAT(Territory) 
GROUP BY territory 
FROM employee_tbl; 

또는 같은 colace 뭔가가있는 함수를 만드는이

CREATE FUNCTION [dbo].[terr] 
(
    @territoryID int 
) 
RETURNS varchar(max) 
AS 
BEGIN 
    declare @output varchar(max) 
    select @output = COALESCE(@output + ', ', '') + territory 
    from TerritoryPricing 
    where territoryid = @territoryID 

    return @output 
END 

GO 

SELECT UserID, [dbo].terr(territoryID) 
FROM TerritoryPricing 
GROUP BY territory 

GO 
0

테스트와 같은 코드

DECLARE @S VARCHAR(8000) 
SELECT 
    Currency, 
    Price , 
    Territories = (Select @S = @S + Territory FROM TerritoryPricing as T2 WHERE T1.Currency = T2.Currency AND T1.Price = T2.Price) , 
    Empty = (select @S ='') 
FROM TerritoryPricing as T1 
WHERE ProductID = 1 
GROUP BY Currency, Price 
관련 문제