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

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
13.02.2002, 15:17
    #32022906
GorM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL
Можно так:

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
13.02.2002, 15:23
    #32022907
GorM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL
сорри,

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
13.02.2002, 16:00
    #32022911
Gramer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL
Так то оно так, но если в базе добавятся записи с новыми Sh (например, 22 какой-нибудь), этот запрос этого не выведет..
Нельзя ли написать универсальный запрос?
...
Рейтинг: 0 / 0
13.02.2002, 16:37
    #32022917
MadDog
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL
2 Gramer:
Если это делать средствами TSQL, получится тошнотворная stored procedure.
Поищите в BOL по "pivot table". Как-то это решается с привлечением Excel. И где-то давным-давно я видел Pivot Table Wizard, только не помню где.
...
Рейтинг: 0 / 0
13.02.2002, 17:14
    #32022922
GorM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL
При переменном числе столбцов - одним универсальным запросом нельзя. Только 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
13.02.2002, 19:07
    #32022933
Gramer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL
Спасибо большое! Обязательно воспользуюсь вашим советом!
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос SQL / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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