|
|
|
MSSQL 2K - перекрестный запрос (аналог TRANSFORM в Аccess) бывает?
|
|||
|---|---|---|---|
|
#18+
Подскажите чайнику плиз: в 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 сложного отбора, возвращающая рекордсет) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2002, 08:02:16 |
|
||
|
MSSQL 2K - перекрестный запрос (аналог TRANSFORM в Аccess) бывает?
|
|||
|---|---|---|---|
|
#18+
Check out GROUPING and CUBE in BOL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2002, 08:27:38 |
|
||
|
MSSQL 2K - перекрестный запрос (аналог TRANSFORM в Аccess) бывает?
|
|||
|---|---|---|---|
|
#18+
Бывает. Запусти в гугле RAC Crosstab query ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2002, 18:25:05 |
|
||
|
MSSQL 2K - перекрестный запрос (аналог TRANSFORM в Аccess) бывает?
|
|||
|---|---|---|---|
|
#18+
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) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2002, 07:20:08 |
|
||
|
MSSQL 2K - перекрестный запрос (аналог TRANSFORM в Аccess) бывает?
|
|||
|---|---|---|---|
|
#18+
А можно еще один вопрос? sp_CrossTab у меня проблема @oncols идет в типе smalldatetime, получается много значений как в эту процедуру ввести диапазон дат и как вставить конвертацию в стиль dd.mm.yy? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2002, 11:25:36 |
|
||
|
|

start [/forum/topic.php?desktop=1&fid=46&tid=1820112]: |
0ms |
get settings: |
6ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
31ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 307ms |

| 0 / 0 |
