此刻,我的数据看起来像这样,所有3个首选项都用逗号分隔...
Subscriber ID Preference
34732632746 Abc123, abc1234, bcd232
我想复制订户ID并将首选项分成不同的行...像这样:
Subscriber ID Preference
34732632746 Abc123
34732632746 abc1234
34732632746 bcd232
答案 0 :(得分:0)
如果您使用的是SQL Server 2017,请检查以下查询。
SELECT
SubscriberID,Value AS Preference
FROM @tblName
CROSS APPLY STRING_SPLIT(Preference, ',');
如果您使用的是较低版本的SQL Server 2017,请添加拆分字符串功能并在下面的查询中使用。
-----查询------------
SELECT SubscriberID,Item AS Preference from @tbl CROSS APPLY dbo.SplitString(Preference, ',');
-----查询------------
-----功能---------
CREATE FUNCTION [dbo].[SplitString]
(
@Input NVARCHAR(MAX),
@Character CHAR(1)
)
RETURNS @Output TABLE (
Item NVARCHAR(1000)
)
AS
BEGIN
DECLARE @StartIndex INT, @EndIndex INT
SET @StartIndex = 1
IF SUBSTRING(@Input, LEN(@Input) - 1, LEN(@Input)) <> @Character
BEGIN
SET @Input = @Input + @Character
END
WHILE CHARINDEX(@Character, @Input) > 0
BEGIN
SET @EndIndex = CHARINDEX(@Character, @Input)
INSERT INTO @Output(Item)
SELECT SUBSTRING(@Input, @StartIndex, @EndIndex - 1)
SET @Input = SUBSTRING(@Input, @EndIndex + 1, LEN(@Input))
END
RETURN
END
-----功能---------
答案 1 :(得分:0)
您没有指定DBMS产品,但是如果您使用Postgres,则可以使用unnest()
和string_to_array()
select t.subscriber_id
p.preference
from the_table t
cross join lateral unnest(string_to_array(p.preference, ',')) as p(preference);