powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / MSSQL 2K - перекрестный запрос (аналог TRANSFORM в Аccess) бывает?
6 сообщений из 6, страница 1 из 1
MSSQL 2K - перекрестный запрос (аналог TRANSFORM в Аccess) бывает?
    #32039805
Pavel Berezin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите чайнику плиз:
в MS Access бывает "перекрестный запрос" для постоения шахматки:

например таблица [Table1]
ID Rw Cl Dt
-----------------
1 r1 c1 wew
2 r2 c1 erer
3 r2 c2 tyy
Здесь ID - первичный ключ-счетчик, Rw - код строки, Cl - код столбца, Dt - данные которые нужно вывести в шахматке

Перекрестный запрос ацесса:
TRANSFORM First(Table1.Dt) AS [Значение]
SELECT Table1.Rw
FROM Table1
GROUP BY Table1.Rw
PIVOT Table1.Cl;

Даст чтото вроде
Rw c1 c2
------------
r1 wew NULL
r2 erer tyy

Вопрос: как тоже самое реализовать в MSSQL?
только не предлагайте MDX, тут [Table1] - результат довольно сложной выборки с параметрами (на практике будет stored procedure сложного отбора, возвращающая рекордсет)
...
Рейтинг: 0 / 0
MSSQL 2K - перекрестный запрос (аналог TRANSFORM в Аccess) бывает?
    #32039806
Robert Djabarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Check out GROUPING and CUBE in BOL.
...
Рейтинг: 0 / 0
MSSQL 2K - перекрестный запрос (аналог TRANSFORM в Аccess) бывает?
    #32040080
SM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бывает. Запусти в гугле

RAC Crosstab query
...
Рейтинг: 0 / 0
MSSQL 2K - перекрестный запрос (аналог TRANSFORM в Аccess) бывает?
    #32040133
Ixtiander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CREATE PROC sp_CrossTab
@table AS sysname, -- Table to crosstab
@onrows AS nvarchar(128), -- Grouping key values (on rows)
@onrowsalias AS sysname = NULL, -- Alias for grouping column
@oncols AS nvarchar(128), -- Destination columns (on columns)
@sumcol AS sysname = NULL -- Data cells
AS
set nocount on
DECLARE
@sql AS varchar(8000),
@NEWLINE AS char(1)

SET @NEWLINE = CHAR(10)

-- ШАГ 1: начало строки SQL
SET @sql =
"SELECT " + @NEWLINE +
" " + @onrows +
CASE
WHEN @onrowsalias IS NOT NULL THEN " AS " + @onrowsalias
ELSE ""
END

CREATE TABLE #keys(keyvalue nvarchar(100) NOT NULL PRIMARY KEY)

DECLARE @keyssql AS varchar(1000)
SET @keyssql =
"INSERT INTO #keys " +
"SELECT DISTINCT CAST(" + @oncols + " AS nvarchar(100)) " +
"FROM " + @table

EXEC (@keyssql)

DECLARE @key AS nvarchar(100)
SELECT @key = MIN(keyvalue) FROM #keys

WHILE @key IS NOT NULL
BEGIN
SET @sql = @sql + "," + @NEWLINE +
" SUM(CASE CAST(" + @oncols +
" AS nvarchar(100))" + @NEWLINE +
" WHEN """ + @key +
""" THEN " + CASE
WHEN @sumcol IS NULL THEN "1"
ELSE @sumcol
END + @NEWLINE +
" ELSE 0" + @NEWLINE +
" END) AS [" + @key + "]"

SELECT @key = MIN(keyvalue) FROM #keys
WHERE keyvalue > @key
END
SET @sql = @sql + @NEWLINE +
"FROM " + @table + @NEWLINE +
"GROUP BY " + @onrows + @NEWLINE +
"ORDER BY " + @onrows

PRINT @sql + @NEWLINE -- For debug
exec (@sql)
...
Рейтинг: 0 / 0
MSSQL 2K - перекрестный запрос (аналог TRANSFORM в Аccess) бывает?
    #32052198
Nick_K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А можно еще один вопрос?
sp_CrossTab
у меня проблема @oncols идет в типе smalldatetime, получается много значений
как в эту процедуру ввести диапазон дат и как вставить конвертацию в стиль dd.mm.yy?
...
Рейтинг: 0 / 0
MSSQL 2K - перекрестный запрос (аналог TRANSFORM в Аccess) бывает?
    #32052704
Tulkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.sqlteam.com/item.asp?ItemID=2955
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / MSSQL 2K - перекрестный запрос (аналог TRANSFORM в Аccess) бывает?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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