powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос SQL
7 сообщений из 7, страница 1 из 1
Запрос SQL
    #32022901
Gramer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть база:

W Sh Cash
1 11 1234
1 11 5678
1 12 1256
1 12 8758
2 11 2543
2 13 8988
2 13 2314
3 14 2345
4 14 7634

Вопрос: как преобразовать ее к виду

W Sh11 Sh12 Sh13 Sh14
1
2
3
4
?
где в каждом столбце стоит "select summ(cash) where W=1" (первая строка), "select summ(cash) where W=2" (вторая строка) и т.д.
т.е. один group by Shop расписан по горизонтали в виде новых полей.
заранее спасибо!
...
Рейтинг: 0 / 0
Запрос SQL
    #32022906
GorM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно так:

SELECT W
,SUM(CASE SH WHEN 11 THEN Cash ELSE 0) AS Sh11
,SUM(CASE SH WHEN 12 THEN Cash ELSE 0) AS Sh12
,SUM(CASE SH WHEN 13 THEN Cash ELSE 0) AS Sh13
,SUM(CASE SH WHEN 14 THEN Cash ELSE 0) AS Sh14
FROM table
GROUP BY W

Если кол-во Sh переменное, то без DSQL не обойтись.
...
Рейтинг: 0 / 0
Запрос SQL
    #32022907
GorM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сорри,

SELECT W
,SUM(CASE SH WHEN 11 THEN Cash ELSE 0 END) AS Sh11
,SUM(CASE SH WHEN 12 THEN Cash ELSE 0 END) AS Sh12
,SUM(CASE SH WHEN 13 THEN Cash ELSE 0 END) AS Sh13
,SUM(CASE SH WHEN 14 THEN Cash ELSE 0 END) AS Sh14
FROM table
GROUP BY W
...
Рейтинг: 0 / 0
Запрос SQL
    #32022911
Gramer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так то оно так, но если в базе добавятся записи с новыми Sh (например, 22 какой-нибудь), этот запрос этого не выведет..
Нельзя ли написать универсальный запрос?
...
Рейтинг: 0 / 0
Запрос SQL
    #32022917
MadDog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Gramer:
Если это делать средствами TSQL, получится тошнотворная stored procedure.
Поищите в BOL по "pivot table". Как-то это решается с привлечением Excel. И где-то давным-давно я видел Pivot Table Wizard, только не помню где.
...
Рейтинг: 0 / 0
Запрос SQL
    #32022922
GorM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При переменном числе столбцов - одним универсальным запросом нельзя. Только DSQL. (Кстати, не так уж и тошнотворно...)

DECLARE @Sh int
DECLARE @SelectSQL varchar(1000)

SET @SelectSQL = 'SELECT W'

DECLARE cur CURSOR FOR
SELECT DISTINCT Sh
FROM table
ORDER BY Sh

OPEN cur
FETCH NEXT FROM cur INTO @Sh
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SelectSQL = @SelectSQL + ', SUM(CASE Sh WHEN ' + LTRIM(@Sh) + ' THEN Cash ELSE 0 END) AS [Sh' + LTRIM(@Sh) +']'
FETCH NEXT FROM cur INTO @Sh
END
CLOSE cur
DEALLOCATE cur

EXECUTE (@SelectSQL + ' FROM table GROUP BY W')
...
Рейтинг: 0 / 0
Запрос SQL
    #32022933
Gramer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо большое! Обязательно воспользуюсь вашим советом!
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос SQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]