基于变量的SQL插入

时间:2018-09-18 12:30:12

标签: tsql sql-server-2014

我需要确定如何执行以下操作。

我有两栏。

一个是“交易参考”,在我的示例中,它是一个唯一数字,我有4,5,6。

另一个是分析代码9字段。这只会是A,O或N。

enter image description here

在这种情况下,如果不存在Analysis 9代码,则缺少O和A,我需要为每个事务引用创建一行-这是因为我随后需要结合使用它们,才能在SSIS和客户中输出文件即使说分析代码O不可用,也需要空白文件。

因此,我希望在此示例中创建6行。 批次4,5,6的O。 批次4,5,6的A A。

2 个答案:

答案 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] 

谢谢