ETL将通用交易转换为下注和赢局

时间:2018-11-19 13:57:58

标签: sql-server ssis etl

我的数据库出现问题,了解通用交易(如果下注或下注)。目前,这两项都包含在一项交易中。 我还有一个附加字段可以帮助->投注金额,该金额不变。

这是表格的样子:

enter image description here

基本上,您在第一笔交易的“金额”字段中看到的是客户开始的金额。每当下一笔交易的金额高于之前的交易时,则特定的下注也将赢得一个胜利,如果下一个交易的金额低于其唯一下注。

我需要创建一个ETL流程来创建此表:

enter image description here

希望您可以帮助我编写高效的SQL Server代码以创建请求的表。

预先感谢

2 个答案:

答案 0 :(得分:0)

在您的OLEDB源代码中将以下脚本用作SQL命令

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]

答案 1 :(得分:0)

我不确定我是否会尝试纯粹在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