添加丢失的数据
Add the missing data
首先范围是数据库 运行 SQL Server 2000 兼容性
我有一个用于拆分字符串的自定义函数
CREATE FUNCTION dbo.splitstring ( @stringToSplit VARCHAR(MAX) )
RETURNS
@returnList TABLE ([Name] [nvarchar] (500))
AS
BEGIN
DECLARE @name NVARCHAR(255)
DECLARE @pos INT
WHILE CHARINDEX(',', @stringToSplit) > 0
BEGIN
SELECT
@pos = CHARINDEX(',', @stringToSplit),
@name = SUBSTRING(@stringToSplit, 1, @pos-1)
INSERT INTO @returnList
SELECT ltrim(RTRIM(@name))
SELECT @stringToSplit = SUBSTRING(@stringToSplit, @pos + 1, LEN(@stringToSplit) - @pos)
END
INSERT INTO @returnList
SELECT ltrim(RTRIM(@stringToSplit))
RETURN
END
效果很好。
现在来解决我的问题
我有这个数据:
由以下 SQL 制作:
with CTE as
(
select '1' CustomerID, 'BCONS1' Code union
select '1', 'BCONS2' union
select '2' CustomerID, 'BCONS1' Code union
select '2', 'BCONS2'
)
select *
from CTE where CustomerID = 1
union
select Null, s.Name from dbo.splitstring('ACONS1,ACONS2,ACONS3') S
如何将“缺失的”CustomerID 添加到我的结果中?
您可以进行交叉应用,但这在 Compat 级别 80 上也不支持。但是我们仍然可以强制两个表的笛卡尔积:
with CTE as
(
select '1' CustomerID, 'BCONS1' Code union
select '1', 'BCONS2' union
select '2' CustomerID, 'BCONS1' Code union
select '2', 'BCONS2'
)
select *
from CTE where CustomerID = 1
union
select *
from
(select distinct
CustomerID,
s.Value
FROM CTE
, string_split('ACONS1,ACONS2,ACONS3', ',') S
where CustomerID = 1 -- restrict which rows you need to have added
) data
注意我在这里使用 string_split 而不是你的函数,因为 SEDE 不允许我创建函数。
首先范围是数据库 运行 SQL Server 2000 兼容性
我有一个用于拆分字符串的自定义函数
CREATE FUNCTION dbo.splitstring ( @stringToSplit VARCHAR(MAX) )
RETURNS
@returnList TABLE ([Name] [nvarchar] (500))
AS
BEGIN
DECLARE @name NVARCHAR(255)
DECLARE @pos INT
WHILE CHARINDEX(',', @stringToSplit) > 0
BEGIN
SELECT
@pos = CHARINDEX(',', @stringToSplit),
@name = SUBSTRING(@stringToSplit, 1, @pos-1)
INSERT INTO @returnList
SELECT ltrim(RTRIM(@name))
SELECT @stringToSplit = SUBSTRING(@stringToSplit, @pos + 1, LEN(@stringToSplit) - @pos)
END
INSERT INTO @returnList
SELECT ltrim(RTRIM(@stringToSplit))
RETURN
END
效果很好。
现在来解决我的问题
我有这个数据:
由以下 SQL 制作:
with CTE as
(
select '1' CustomerID, 'BCONS1' Code union
select '1', 'BCONS2' union
select '2' CustomerID, 'BCONS1' Code union
select '2', 'BCONS2'
)
select *
from CTE where CustomerID = 1
union
select Null, s.Name from dbo.splitstring('ACONS1,ACONS2,ACONS3') S
如何将“缺失的”CustomerID 添加到我的结果中?
您可以进行交叉应用,但这在 Compat 级别 80 上也不支持。但是我们仍然可以强制两个表的笛卡尔积:
with CTE as
(
select '1' CustomerID, 'BCONS1' Code union
select '1', 'BCONS2' union
select '2' CustomerID, 'BCONS1' Code union
select '2', 'BCONS2'
)
select *
from CTE where CustomerID = 1
union
select *
from
(select distinct
CustomerID,
s.Value
FROM CTE
, string_split('ACONS1,ACONS2,ACONS3', ',') S
where CustomerID = 1 -- restrict which rows you need to have added
) data
注意我在这里使用 string_split 而不是你的函数,因为 SEDE 不允许我创建函数。