在SQL Server中将行转换为列的存储过程

时间:2015-05-17 06:31:38

标签: sql sql-server database sql-server-2008

我正在寻找一种有效的方法来在SQL Server中将行转换为列。我在Toad for Oracle中尝试过,但现在我想在SQL Server中使用它。

这是我的例子:

CID   SENTENCE
1   Hello; Hi;
2   Why; What;

结果应该像

CID   SENTENCE

1   Hello
1   Hi
2   Why
2   What

请你帮帮我吗?

2 个答案:

答案 0 :(得分:0)

我建议您重新考虑数据库设计。在任何关系数据库的分隔字符串中存储数据几乎都不是一个好主意。
如果无法更改数据库设计,则需要使用一些UDF来拆分字符串 在sql server中有许多不同的方法来分割字符串,阅读this article关于常见方法之间的差异。

您可以更改所选的拆分字符串函数,将cidsentence作为变量,并使其返回与表中每行所需输出完全相同的数据。
然后你要做的就是从你的桌子中选择一个内部联接,并在cid上加上udf

答案 1 :(得分:0)

  declare @var table (CID int,   SENTENCE  varchar(50))
    insert into @var(CID,SENTENCE) values
    (1,'Hello; Hi;'),
    (2,'Why; What;')

    select cid,t.c.value('.','varchar(50)') as val 
from (select cid,x=cast('<t>'+ replace(stuff(sentence,len(sentence),1,''),';','</t><t>')+'</t>'  as xml) 
 from @var) a cross apply x.nodes('/t')  t(c)