Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Из строк в столбцы / 5 сообщений из 5, страница 1 из 1
28.10.2002, 18:29:48
    #32062452
Alexey_Ko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из строк в столбцы
Тут на днях проблема возникла - как лучше из списка типа:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Tab_No|Code|Sum
 ------+----+----
 
Tab1__|Cod1|Sum1
Tab1__|Cod2|Sum2
Tab2__|Cod1|Sum3
Tab2__|Cod3|Sum4

Получить:
      |Сod1|Сod2|Сod3
 ------+----+----+----+
 
Tab1__|Sum1|Sum2|    |
Tab2__|Sum3|    |sum4|


?
...
Рейтинг: 0 / 0
28.10.2002, 18:50:50
    #32062461
LG
LG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из строк в столбцы
Напиши функцию, которая будет возвращать данные в нужном виде ...
...
Рейтинг: 0 / 0
29.10.2002, 06:53:29
    #32062508
Luchkin Dmitry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из строк в столбцы
<A HREF="/topic/10482">это поможет?</A>
...
Рейтинг: 0 / 0
29.10.2002, 10:24:19
    #32062554
Alexey_Ko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из строк в столбцы
У меня, вобщем, примерно так реализовалось:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
	DECLARE inoutslist CURSOR FOR 	
		SELECT distinct accounts.inout FROM accounts INNER JOIN inouts ON accounts.inout = inouts.code WHERE
			inouts.inout = '+' AND inouts.[add] = '+' AND cperiod = @cperiod  
			AND schet IN (SELECT * FROM schet_list)
	OPEN inoutslist
	EXEC ('CREATE TABLE [' + @TempTableName + '] (tnum varchar(6) NULL)')
	EXEC ('INSERT [' + @TempTableName + '] SELECT DISTINCT tnum FROM accounts WHERE cperiod = ''' + @cperiod + '''')
	FETCH NEXT FROM tt INTO @TempField
	WHILE @@FETCH_STATUS =  0 
	BEGIN
		EXEC('ALTER TABLE [' + @TempTableName + '] ADD ['+@TempField + '] money  NULL DEFAULT 0')
		FETCH NEXT FROM inoutslist INTO @TempField
	END
	CLOSE inoutslist
	DEALLOCATE inoutslist

	DECLARE tnums CURSOR FOR
		SELECT DISTINCT tnum, accounts.inout, 
		CONVERT(varchar( 12 ), sum([endsum])) as [sum] 
		FROM accounts 
		INNER JOIN inouts ON accounts.inout = inouts.code 
		WHERE accounts.cperiod = @cperiod 
			AND inouts.[add] = '+' 
			AND inouts.inout = '+' 
			AND schet IN (SELECT * FROM schet_list) GROUP BY tnum, accounts.inout
	OPEN tnums
	FETCH NEXT FROM tnums INTO @Tnum, @TempField, @TR
	WHILE @@FETCH_STATUS =  0 
	BEGIN
		EXEC( 'UPDATE ['+@TempTableName + '] SET ['+@TempField+'] = ' + @TR + ' WHERE tnum = ''' + @tnum + '''')
		FETCH NEXT FROM tnums INTO @tnum, @TempField, @TR
	END

	CLOSE tnums
	DEALLOCATE tnums


	EXEC ('SELECT  fio = rtrim(b.fam) + '' '' + Left(b.name, 1) + ''.'' + Left(b.patr, 1) + ''.''
		, c.shortname
		, a.* FROM [' + @TempTableName + '] a 
		INNER JOIN cardspri b ON a.tnum = b.tnum 
		INNER JOIN struct c ON b.c_struct = c.code 
		ORDER BY c.code, a.tnum')


 -- Удаление таблиц с мифическими именами.
 

	EXEC ('DROP TABLE [' + @TempTableName + ']')   

(Обявления переменных сюда тащить не стал)
А может кто пооригинальнее способ подскажет?
...
Рейтинг: 0 / 0
29.10.2002, 10:29:46
    #32062560
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из строк в столбцы
А может кто пооригинальнее способ подскажет?

Использовать
SELECT ... GROUP BY ... WITH ROLLUP
+ функция GROUPING()

и навсегда забыть про cross-tab query
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Из строк в столбцы / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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