2016-10-03 5 views
1

У меня есть две таблицыSQL заголовок столбца из другой таблицы

Index | Name | GroupIndex \\table1 
1  | A | 1 
2  | A | 1 
3  | A | 2 

Index | GroupName \\table2 
1  | G1  
2  | G2  

Я хотел бы мой результат будет

Index | Name | G1 | G2 
1  | A | 2 | 1 

, где мне нужно, чтобы отобразить количество записей Name сгруппированных по GroupIndex, но в формате столбца.

Я не мог найти способ динамически добавлять столбцы из другой таблицы. Можете ли вы мне помочь?

+0

Использование поворота для преобразования строк таблицы в столбцы –

+0

'Выбор B.Index, A.Name, 1, как G1, G2, как 2 из (выберите A.GroupIndex, B.GroupName, B. Индекс из таблицы 1 Внутреннее соединение Таблица 2 B на A.GroupIndex = B.Index) Pivot (count (A.GroupIndex) для B.Index в (1, 2)) как pvt ORDER by B.Index', посмотрите, работает ли это , – Nadeem

ответ

1
create table #table1 ([Index] int,Name char(1), GroupIndex int) 
create table #table2 ([Index] int,GroupName char(2)) 

insert into #table1 values 
(1,'A',1), 
(2,'A',1), 
(3,'A',2) 

insert into #table2 values 
(1,'G1'), 
(2,'G2') 

--select * from #table1 
--select * from #table2 

select * from 
    (select t1.[GroupIndex] as [Index], t1.Name, t2.[Index] as gi, t2.GroupName 
    from #table1 t1 
    inner join #table2 t2 on t2.[Index] = t1.[Index]) as s 
PIVOT 
    (max(gi) FOR GroupName in (G1,G2)) as pvt 

--RESULTS-- 

Index Name G1 G2 
1  A  1 2 
+0

'GroupName in (G1, G2)' - Есть ли способ расширить его до n групп? –

+0

Да @ KarthikNishanth, но включает динамический SQL. Однако очень выполнимо. – scsimon

1

создать стержень этой группы вашего пользователя по имени затем сосчитать их группу, используя функцию суммы для каждой группы.

SELECT 
    Sum(case when tbl2.[index]=1 THEN 1 ELSE 0 end) AS G1, 
    SUM(case when tbl2.[index]=2 THEN 1 ELSE 0 end) AS G2 
FROM tbl1 
join tbl2 on tbl2.[index] = tbl1.GroupIndex group by tbl1.Name 

enter image description here

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