lkmrus
@lkmrus
IT-engineer

Как правильно сделать SQL запрос?

Подскажите как переделать выборку из таблицы @actionsUsers
SELECT * FROM @actionsUsers
Пользователь    Действие                ТипДействия
	Иванов              Изменил дату         1
	Петров              Добавил запись       4
	Соколов            Изменил описание  2
	Иванов              Изменил дату         1
	Соколов            Изменил заголовок 3
        Соколов            Изменил заголовок 3

Пользователи не повторялись, количество действий столбца ТипДействия, описание действия в заголовке выборки.
Чтобы получилось вот так:
Пользователь    Добавил запись       Изменил дату     Изменил описание    Изменил заголовок</li>
             Иванов              0                                     2                              0                            0
             Петров              1                                    0                               0                             0
             Соколов            0                                    0                                1                             2
  • Вопрос задан
  • 109 просмотров
Решения вопроса 1
tsklab
@tsklab Куратор тега SQL Server
Здесь отвечаю на вопросы.
PIVOT требует, что бы список "Действий" был определён заранее.

DECLARE @actionsUsers TABLE ( Пользователь VARCHAR(100), Действие VARCHAR(100), ТипДействия INT )
INSERT @actionsUsers VALUES ( 'Иванов', 'Изменил дату', 1 ),
( 'Петров',  'Добавил запись',    4 ),
( 'Соколов', 'Изменил описание',  2 ),
( 'Иванов',  'Изменил дату',      1 ),
( 'Соколов', 'Изменил заголовок', 3 ),
( 'Соколов', 'Изменил заголовок', 3 )

SELECT [Пользователь], 
       [Добавил запись], [Изменил дату], [Изменил описание], [Изменил заголовок]
  FROM 
    ( SELECT [Пользователь], [Действие]
        FROM @actionsUsers ) AS AUC
  PIVOT ( COUNT([Действие]) FOR [Действие] 
    IN ([Добавил запись], [Изменил дату], [Изменил описание], [Изменил заголовок] )) AS PT
  ORDER BY [Пользователь]
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы