Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / MSSQL 2K - перекрестный запрос (аналог TRANSFORM в Аccess) бывает? / 6 сообщений из 6, страница 1 из 1
31.07.2002, 08:02:16
    #32039805
Pavel Berezin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSQL 2K - перекрестный запрос (аналог TRANSFORM в Аccess) бывает?
Подскажите чайнику плиз:
в 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
31.07.2002, 08:27:38
    #32039806
Robert Djabarov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSQL 2K - перекрестный запрос (аналог TRANSFORM в Аccess) бывает?
Check out GROUPING and CUBE in BOL.
...
Рейтинг: 0 / 0
31.07.2002, 18:25:05
    #32040080
SM
SM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSQL 2K - перекрестный запрос (аналог TRANSFORM в Аccess) бывает?
Бывает. Запусти в гугле

RAC Crosstab query
...
Рейтинг: 0 / 0
01.08.2002, 07:20:08
    #32040133
Ixtiander
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSQL 2K - перекрестный запрос (аналог TRANSFORM в Аccess) бывает?
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
22.09.2002, 11:25:36
    #32052198
Nick_K
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSQL 2K - перекрестный запрос (аналог TRANSFORM в Аccess) бывает?
А можно еще один вопрос?
sp_CrossTab
у меня проблема @oncols идет в типе smalldatetime, получается много значений
как в эту процедуру ввести диапазон дат и как вставить конвертацию в стиль dd.mm.yy?
...
Рейтинг: 0 / 0
24.09.2002, 15:02:26
    #32052704
Tulkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSQL 2K - перекрестный запрос (аналог TRANSFORM в Аccess) бывает?
http://www.sqlteam.com/item.asp?ItemID=2955
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / MSSQL 2K - перекрестный запрос (аналог TRANSFORM в Аccess) бывает? / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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