2014-02-24 3 views
0

У меня есть 2 таблицы, я хочу рассчитать количество поездок.Sql groupby Несколько столбцов

tbl1 
id location 
1 A 
2 B 
3 C 

tabl 2 
id tabl1id table1id 
1  1  2 
2  1  3 
3  2  1 
4  3  1 
5  1  3 
6  1  3 

и я хочу привести, как это, я хочу, чтобы рассчитывать

SrNo A To B A to C B To A C To A 
1  1   3  1   1 
+0

, и если у вас есть 4 строки в tbl1, то в желаемом результате будет 10 столбцов. Я думаю, вам нужно изменить дизайн ... –

+0

спасибо за ответ @HomayounAfshari в основном я хочу рассчитать общее количество поездок в определенном месте. Для примера между местоположением от A до C общее число поездок составляет 3 и от A до b общее количество поездок равно 1. – enigma

+0

как насчет того, чтобы поместить вместо столбцов «A в B», «от A до C» и т. Д. В этом случае вам не нужно использовать динамические запросы PIVOT. – cha

ответ

0

Это может помочь U ...

DECLARE @tbl1 TABLE 
(
    id INT , location VARCHAR(1) 
)DECLARE @tbl2 TABLE 
(
    id INT , tabl1id INT , table1Toid INT 
) 
INSERT INTO @tbl1 
SELECT 1 , 'A' UNION ALL 
SELECT 2 , 'B' UNION ALL 
SELECT 3 , 'C' 

INSERT INTO @tbl2 
SELECT  1 , 1,  2 UNION ALL 
    SELECT 2 , 1 ,  3 UNION ALL 
SELECT  3 , 2 ,  1 UNION ALL 
SELECT  4 , 3 ,  1 UNION ALL 
SELECT  5 , 1 , 3 UNION ALL 
SELECT  6 , 1 , 3 

SELECT * FROM 
(
SELECT COUNT(tabl1id) CNT , (SELECT location FROM @tbl1 WHERE ID=T2.tabl1id)+' To '+(SELECT location FROM @tbl1 WHERE ID=T2.table1Toid) AS location 
FROM @tbl2 T2 
GROUP BY tabl1id,table1Toid 
)D 
PIVOT (MIN(CNT) FOR location IN ([B To A],[C To A],[A To B],[A To C])) AS PVT 
0

, если это не имеет значения, чтобы увидеть результаты в строках (вместо столбцов) вы можете сделать это путем группировки по двум колонкам:

SELECT src , dest, count(id) 
FROM tbl2 
GROUP BY src , dest 

для получения дополнительной информации см. MySQL GROUP BY two columns