Вставка SQL на основе переменных - PullRequest
0 голосов
/ 18 сентября 2018

Мне нужно понять, как сделать следующее.

У меня есть два столбца.

Одним из них является Ссылка на транзакцию, которая в моем примере является уникальным номером. У меня 4,5,6.

Вторым является поле "Код анализа 9".Это будет только A, O или N.

enter image description here

Если в данном случае не существует кода Analysis 9, O и A отсутствуют, мне нужносоздать строку для каждой ссылки на транзакцию - это потому, что мне нужно использовать их комбинацию для вывода файла в SSIS, а клиенту требуется пустой файл, даже если, скажем, код анализа O недоступен.

ИтакЯ бы ожидал 6 строк, созданных в этом примере.АО для партии 4,5,6.AA для партии 4,5,6.

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Пожалуйста, попробуйте ниже.

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] 

Спасибо

0 голосов
/ 18 сентября 2018

В основном вы хотите найти все отдельные ссылки на транзакции и скрестить их со всеми возможными кодами.Затем вам нужно отфильтровать это, чтобы найти недостающие пары.

СЛЕДУЮЩЕЕ СОЕДИНЕНИЕ в конце выполнит фильтрацию за вас.

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]
...