SQL-запрос из плоского файла - PullRequest
0 голосов
/ 19 января 2010

У меня есть таблица, такая как:

John email1 email2 email3 ...and so on

Мне нужно преобразовать набор данных в этот формат:

John email1
John email2
John email3

он может быть экспортирован в Excel и импортирован обратно весли бы это было прощеСпасибо ...

Ответы [ 4 ]

4 голосов
/ 19 января 2010

Предполагая, что Имя, Email1, Email2, Email3 являются именами столбцов:

   Select Name, Email1
    From YourTable
    Where Email1 <> ''
    Union
    Select Name, Email2
    From YourTable
    Where Email2 <> ''
    Union
    Select Name, Email3
    From YourTable
    Where Email3 <> ''
3 голосов
/ 19 января 2010

Что вы имеете в виду исправить? Вы можете просто сделать что-то вроде этого:

SELECT name+' '+email1 as email1,
       name+' '+email2 as email2, 
       name+' '+email3 as email3, 
       name+' '+email3 as email3, 
       ...
FROM table

Выше было написано до того, как я увидел форматирование ... я думаю, это то, что вы хотите - проверено только на mssqlserver

declare @t table
(
  name varchar(max),
  email1 varchar(max),
  email2 varchar(max),
  email3 varchar(max),
  email4 varchar(max)
)

insert into @t 
 values ('name1a','email1a','email2a','email3a','email4a')
insert into @t  
 values ('name2b','email1b','email2b','email3b','email4b')

 select * from @t

SELECT name, email 
FROM
(
SELECT name, email1, email2, email3, email4
FROM @t) p
UNPIVOT
   (email FOR emails IN 
      (email1, email2, email3, email4)
)AS unpvt
0 голосов
/ 19 января 2010

Полный пересмотр (Мой первоначальный ответ был основан на недолгой неверной версии вопроса).

Если «плоский файл» относится к текстовому файлу, то простой (не SQL) версией для преобразования будет использование awk с чем-то вроде этого:

awk "{ for (i = 2; i <= NF; i++ ) { print $1, $i }}" < original.txt
0 голосов
/ 19 января 2010

Я не вижу причин «выходить» в XLS или что-то еще, а затем повторно импортировать.

Вы можете исправить ситуацию с помощью

1) (только если это считается достойным, в зависимости отпо размеру БД, количеству строк и т. д.), возможно, удалите несколько индексов в таблице.

2) Выполнение запросов INSERT для добавления новых строк, т. Е. Сделанных из столбцов Name и «Emailn» (вместе с другими желаемыми столбцами или желаемыми значениями по умолчанию)

3) Раз всестолбцы «Emailn» были отправлены, изменив схему таблицы для удаления этих столбцов.

4) Перестроение индексов, удаленных ранее, и / или переупаковка остальных.

В частности,для # 2 запрос (-ы) будет выглядеть так:

INSERT INTO MyTable 
   (Name, Email1, SomeOtherColumn, YetOtherColumn)
   SELECT Name, Email2, someColumn, "ABC"
   FROM MyTable
   WHERE Email2 IS NOT NULL

Вы делаете это для каждого столбца «Emailn», кроме Email1, конечно.Et voila ...

Возможно, только трудности, когда таблица очень большая и т. Д., Но, поскольку вы рассматривали Excel, это, вероятно, не так.

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