powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Из строк в столбцы
5 сообщений из 5, страница 1 из 1
Из строк в столбцы
    #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
Из строк в столбцы
    #32062461
LG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Напиши функцию, которая будет возвращать данные в нужном виде ...
...
Рейтинг: 0 / 0
Из строк в столбцы
    #32062508
Фотография Luchkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
<A HREF="/topic/10482">это поможет?</A>
...
Рейтинг: 0 / 0
Из строк в столбцы
    #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
Из строк в столбцы
    #32062560
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А может кто пооригинальнее способ подскажет?

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

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


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