[英]SQL query from flat file
我有一张桌子,例如:
John email1 email2 email3 ...and so on
我需要将数据集转换为以下格式:
John email1
John email2
John email3
如果可以的话,可以将其导出到Excel,然后重新导入。 谢谢...
假设Name,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 <> ''
你是什么意思修复? 您可以这样做:
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
我认为没有理由“走出去”到XLS或其他东西,然后重新导入。
您可以通过以下方式解决问题
1)(仅当认为有价值时,取决于数据库大小,行数等),可能会在表上删除一些索引。
2)运行INSERT查询以添加新行,即由“名称”和“ Emailn”列(以及其他所需的列或所需的默认值)组成的新行
3)一旦所有“电子邮件”列都已分派,请更改表架构以删除这些列。
4)重新构建较早删除的索引和/或重新打包其他索引。
具体来说,对于#2,查询看起来像
INSERT INTO MyTable
(Name, Email1, SomeOtherColumn, YetOtherColumn)
SELECT Name, Email2, someColumn, "ABC"
FROM MyTable
WHERE Email2 IS NOT NULL
当然,您可以对Email1以外的每个“ Emailn”列执行此操作。 等等...
当表很大等情况时,可能只有困难,但是由于您正在考虑使用Excel,所以情况可能并非如此。
彻底检修 (我的原始答案是根据问题的短期错误版本)。
如果“平面文件”是指文本文件,则用于转换的简单(非SQL)版本将是使用awk和以下内容:
awk "{ for (i = 2; i <= NF; i++ ) { print $1, $i }}" < original.txt
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.