添加丢失的数据

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 不允许我创建函数。