2016-11-29 4 views
0

Представьте результат запроса что-то вроде следующего:эффективный запрос группировать по одному полю и поместить все другие поля в строке SQL

+----+---------+--------+ 
| id | count | type | 
+----+---------+--------+ 
| 1 | 20  | a  | 
| 1 | 30  | b  | 
| 1 | 10  | c  | 
| 2 | 05  | a  | 
| 2 | 20  | b  | 
| 2 | 40  | c  | 
+----+---------+--------+ 

и ожидаемый результат:

+----+---------+--------+------+ 
| id | a  | b  | c | 
+----+---------+--------+------+ 
| 1 | 20  | 30  | 10 | 
| 2 | 05  | 20  | 40 | 
+----+---------+--------+------+ 

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

+0

Я удален T-SQL на основе перевеса доказательств. Вы должны пометить только базу данных, которую используете. –

+0

Возможный дубликат [SQL Transpose Rows as Columns] (http://stackoverflow.com/questions/2099198/sql-transpose-rows-as-columns) – CGritton

ответ

4

Один метод использует условную агрегацию:

select id, 
     sum(case when type = 'a' then count else 0 end) as a, 
     sum(case when type = 'b' then count else 0 end) as b, 
     sum(case when type = 'c' then count else 0 end) as c 
from t 
group by id; 

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

  • Нет связанных вопросов^_^