Использование Pivot в SQL - PullRequest
2 голосов
/ 24 марта 2009

Например, у меня есть таблица

IPPARSED
127
0
0
1

теперь мне нужно повернуть стол, чтобы он мог выглядеть следующим образом

1 2 3 4
127 0 0 1

Можете ли вы помочь мне, как?

Ответы [ 4 ]

2 голосов
/ 24 марта 2009

Вы можете попробовать использовать операторы case для поворота таблицы, предполагая, что строки всегда идут в таком порядке:

SELECT (case when (<condition to match first octet>) then IPPARSED else END) as 1,
       (case when (<condition to match second octet>) then IPPARSED else END) as 2,
       (case when (<condition to match third octet>) then IPPARSED else END) as 3,
       (case when (<condition to match fourth octet>) then IPPARSED else END) as 4
FROM <insert_table_name_or_table_definition_here>

Cf. Поваренная книга SQL Энтони Моллинаро pg 365.


РЕДАКТИРОВАТЬ: если у вас возникли проблемы с набором <condition to match (...) octet>, вам нужно будет задействовать оператор select для результатов запроса, который каким-то образом добавляет числа в таблицу. В Oracle вы бы использовали столбец rownum psuedocolumn, но его нет в SQL Server. Похоже, что в SQL Server 2005 вы можете использовать встроенную функцию ROW_NUMBER() в качестве столбца или, возможно, использовать функцию IDENTITY(...) в качестве столбца в этом запросе.

1 голос
/ 24 марта 2009

Я бы согласился с ответом sheepsimulator, но, как вы прокомментировали мой ответ, Дэвид, если у вас нет столбца группировки и нескольких записей в вашей таблице, будет трудно найти соответствующее условие. Если у вас есть только одна запись IP (то есть 4 строки), вы можете:

  • использовать lineID (rownum в Oracle) для группировки
  • парсинг 4 строки; -)

РЕДАКТИРОВАТЬ: первое решение (с использованием lineID) может быть использовано для анализа нескольких записей IP, но для этого нужны последовательные вставки в БД.

1 голос
/ 24 марта 2009

Я думаю, что вы делаете что-то странное, когда проанализированный IP-адрес выходит в виде четырех строк. Это должно быть довольно легко разобрать прямо в строке. Не могли бы вы предоставить свой метод анализа и / или формат ввода?

1 голос
/ 24 марта 2009

Привет, у тебя нет другого столбца в твоей таблице для агрегации IP-адресов? У вас не должно быть только одного целого числа на запись без какого-либо другого столбца группы, не так ли? Какую БД вы используете?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...