данные в качестве столбцов

Модераторы: kdv, CyberMax

Ответить
RedAndBlack
Сообщения: 24
Зарегистрирован: 16 авг 2007, 07:18

данные в качестве столбцов

Сообщение RedAndBlack » 25 дек 2008, 08:30

реально ли сделать так, чтобы данные из таблицы в результате запроса были столбцами? вроде пересечением или кросстабом называется такое. как бы это замутить на sql?

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Re: данные в качестве столбцов

Сообщение WildSery » 25 дек 2008, 11:09

Поиском пробовал?
Если же ты упёртый, и стандартные методы (на клиенте) получения кросстаба не устраивают - есть и альтернативный способ.

Gera
Сообщения: 53
Зарегистрирован: 12 мар 2008, 17:34

Re: данные в качестве столбцов

Сообщение Gera » 25 дек 2008, 13:16

А количество столбцов зарание известно?

RedAndBlack
Сообщения: 24
Зарегистрирован: 16 авг 2007, 07:18

Re: данные в качестве столбцов

Сообщение RedAndBlack » 25 дек 2008, 14:31

WildSery писал(а):Поиском пробовал?
Если же ты упёртый, и стандартные методы (на клиенте) получения кросстаба не устраивают - есть и альтернативный способ.
спасибо за инфу) метод на клиенте в принципе устраивает, но стало интересно можно ли sql'м замутить это)
Gera писал(а):А количество столбцов зарание известно?
нет)

Gera
Сообщения: 53
Зарегистрирован: 12 мар 2008, 17:34

Re: данные в качестве столбцов

Сообщение Gera » 25 дек 2008, 14:51

но стало интересно можно ли sql'м замутить это)
В чисто академических целях можно реализовать через EXECUTE STATEMENT, что-то вроде этого:

Код: Выделить всё

CREATE TABLE COLS (COL_ID INT, COL_NAME VARCHAR(100)) -- значиения, преобразуемые в столбцы и их псевдонимы
CREATE TABLE VALS (COL_ID INT, ROW_ID INT, VALUE FLOAT) -- разворачиваемая таблица

INSERT INTO COLS VALUES (1, 'AAA')
INSERT INTO COLS VALUES (2, 'BBB')
INSERT INTO VALS VALUES (1,1,0.1)
INSERT INTO VALS VALUES (2,1,0.2)
INSERT INTO VALS VALUES (2,1,0.3)
INSERT INTO VALS VALUES (2,2,0.4)

EXECUTE BLOCK
DECLARE VARIABLE Par VARCHAR(32000), Col VARCHAR(32000), Sql VARCHAR(32000)
BEGIN
  Par = ''
  Col = ''

  SELECT 
    :Col = :Col + ',SUM(CASE WHEN COL_ID=' + CAST(COL_ID AS VARCHAR) + N' THEN VALUE END) AS '+COL_NAME,
    :Par = :Par + CAST(COL_ID AS VARCHAR) + ','
  FROM COLS 
  
  Par = LEFT(:Par, LEN(:Par) - 1)
  
  Sql = 'SELECT ROW_ID'+:Col+
  'FROM VALS
  WHERE COL_ID IN (' + :Par + ')
  GROUP BY ROW_ID'
   
  EXECUTE STATEMENT :SQL

END
P.S. Если что не так просьба сильно не пинать, скрипт писался для другой БД, а FB сайчас под рукой нет проверить

RedAndBlack
Сообщения: 24
Зарегистрирован: 16 авг 2007, 07:18

Re: данные в качестве столбцов

Сообщение RedAndBlack » 26 дек 2008, 09:10

спасибо) как попробую отпишусь;)

Ответить