ETL трансформация родовой транзакции в бет и выигрыш - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть проблема в моей базе данных, понимание общей транзакции, если это ставка или выигрыш.В настоящее время он состоит как из одной транзакции.У меня есть дополнительное поле, которое может помочь -> Сумма ставки, которая постоянна.

Вот как выглядит таблица:

enter image description here

По сути, то, что вы видите в поле «Сумма» в первой транзакции, - это сумма, с которой клиент начинает.Всякий раз, когда количество следующих транзакций выше по сравнению с предыдущей транзакцией, конкретная ставка также получает выигрыш, если она ниже, чем его единственная ставка.

Мне нужно создать процесс ETL, который создаст этуТаблица:

enter image description here

Надеюсь, вы поможете мне написать эффективный код SQL Server для создания запрошенной таблицы.

Спасибо завперед,

Ответы [ 2 ]

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

Я не уверен, что попытался бы сделать это исключительно в SSIS, но вот запрос, который должен сделать правильно:

select *, 
   case 
      when LAG(Amount, 1, Amount) over (order by TransactionID) = Amount then 'Bet' 
      else 'Win' 
   end
from dbo.Transactions;

Я используюLAG() функция для просмотра на одну строку значения столбца Amount в предыдущей строке (где «предыдущий» определяется порядком TransactionID †).Если это значение одинаково, считайте его ставкой, в противном случае это выигрыш.

† Похоже, вы хотели бы рассматривать игры изолированно.В этом случае измените предложение OVER() функции LAG() на partition by GameID order by TransactionID.

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

Используйте приведенный ниже скрипт в качестве команды SQL в вашем источнике OLEDB

SELECT TransactionID, DateTime, GameID, CASE WHEN ISNULL(Amount, '') = '' THEN 
'StartGame' WHEN Amount > BetAmount THEN 'win' ELSE 'bet' END AS 
TransactionTypeID, BetAmount, Amount
FROM [your table name]
...