我正在寻找一种有效的方法来在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
请你帮帮我吗?
答案 0 :(得分:0)
我建议您重新考虑数据库设计。在任何关系数据库的分隔字符串中存储数据几乎都不是一个好主意。
如果无法更改数据库设计,则需要使用一些UDF
来拆分字符串
在sql server中有许多不同的方法来分割字符串,阅读this article关于常见方法之间的差异。
您可以更改所选的拆分字符串函数,将cid
和sentence
作为变量,并使其返回与表中每行所需输出完全相同的数据。
然后你要做的就是从你的桌子中选择一个内部联接,并在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)