我需要确定如何执行以下操作。
我有两栏。
一个是“交易参考”,在我的示例中,它是一个唯一数字,我有4,5,6。
另一个是分析代码9字段。这只会是A,O或N。
在这种情况下,如果不存在Analysis 9代码,则缺少O和A,我需要为每个事务引用创建一行-这是因为我随后需要结合使用它们,才能在SSIS和客户中输出文件即使说分析代码O不可用,也需要空白文件。
因此,我希望在此示例中创建6行。 批次4,5,6的O。 批次4,5,6的A A。
答案 0 :(得分:0)
您基本上想找到所有不同的交易引用,并将它们与所有可能的代码交叉。然后,您需要对此进行过滤以找出缺失的对。
最后的LEFT JOIN将为您进行过滤。
CREATE TABLE [#trans]
(
[Transaction Reference] int,
[Analysis 9 Code] char(1)
)
CREATE TABLE [#codes]
(
[Code] char(1)
)
-- Create a table with all potential code values
INSERT INTO [#codes] ([Code]) VALUES ('A')
INSERT INTO [#codes] ([Code]) VALUES ('N')
INSERT INTO [#codes] ([Code]) VALUES ('O')
-- Insert your dummy data
INSERT INTO [#trans] ([Transaction Reference], [Analysis 9 Code]) VALUES (6, 'N')
INSERT INTO [#trans] ([Transaction Reference], [Analysis 9 Code]) VALUES (6, 'N')
INSERT INTO [#trans] ([Transaction Reference], [Analysis 9 Code]) VALUES (4, 'N')
INSERT INTO [#trans] ([Transaction Reference], [Analysis 9 Code]) VALUES (4, 'N')
INSERT INTO [#trans] ([Transaction Reference], [Analysis 9 Code]) VALUES (5, 'N')
INSERT INTO [#trans] ([Transaction Reference], [Analysis 9 Code]) VALUES (6, 'N')
SELECT [ExistingRefs].[Transaction Reference] AS [Transaction Reference],
[#codes].[Code] AS [Analysis 9 Code]
FROM
(
SELECT DISTINCT([Transaction Reference]) [Transaction Reference] FROM [#trans]
) [ExistingRefs]
CROSS JOIN [#codes]
LEFT JOIN [#trans] ON [ExistingRefs].[Transaction Reference] = [#trans].[Transaction Reference]
AND [#codes].[Code] = [#trans].[Analysis 9 Code]
WHERE [#trans].[Analysis 9 Code] IS NULL
DROP TABLE [#trans]
DROP TABLE [#codes]
答案 1 :(得分:0)
请尝试以下操作。
select distinct t.[Transaction Reference],x.code from #trans t
cross apply(select distinct code from #codes c inner join #trans tt on c.Code<>tt.[Analysis 9 Code])x
order by t.[Transaction Reference]
谢谢