2013-08-23 3 views
0

Рассмотрим следующий входГруппировка данных на основе двух столбцов в SQL-сервере

Country1 Country2 
A Z 
B Y 
C X 
D W 
X C 
W D 
A Z 

Я хочу, чтобы сгруппировать данные с учетом туда и обратно, как один. Для, например: Учитывая C в X и X на С, как 1.

Country1 Country2 Count of Trip 
A Z 2 
B Y 1 
C X 1 
D W 1 

Как я группа кругорейсов вместе в запросе.

+0

Почему есть подсчет «1 "а не" 2 "? –

+0

Поездка в оба конца должна рассматриваться как одна. –

ответ

2
with cte as (
    select 
     case when Country1 < Country2 then Country1 else Country2 end as Country1, 
     case when Country1 < Country2 then Country2 else Country1 end as Country2 
    from Table1 
) 
select 
    Country1, Country2, count(*) 
from cte 
group by Country1, Country2 

sql fiddle demo

+0

Его работы отлично. Благодарю. –

+1

hm, Я только что видел, что он не делает то, что вы просите, еще раз проверьте. Или ответ или ответ неправильный :) –

+0

@Mani, пожалуйста, проверьте еще раз. Я изменю свой ответ, если это не то, что вам нужно –

1

Вы можете устранить кругорейсы с помощью связанного подзапроса, то сделайте простую группировку:

SELECT 
    t1.Country1, 
    t1.Country2, 
    COUNT(*) AS Trips 
FROM Table1 t1 
WHERE NOT EXISTS 
    (
    SELECT * FROM Table1 t2 
    WHERE t1.Country1 = t2.Country2 
     AND t1.Country2 = t2.Country1 
     AND t1.Country1 > t1.Country2 
    ) 
GROUP BY t1.Country1, t1.Country2 

SQLFiddle DEMO

Смежные вопросы