我对如何解决这个问题有些困惑,并且没有太多运气找到真正能解决这个问题的答案。
我想获取一组交易数据,从带有很多干扰的列中提取基础公司的名称,然后将该名称与该特定交易的买入或卖出相结合。
然后,我想看看同时存在公司买卖的每个实例,如果有,则将“买卖”标记为“是”,将“买卖”标记为“卖出”。因此,如果我有17笔“ Pepsi_Buy”交易和1笔“ Pepsi_Sell”交易,则每笔交易“ Pepsi_Buy”都会得到“是”,而1笔“ Pepsi_Sell”将会得到“卖出”标签。
如果我所有的都是'Pepsi_Buy',而没有'Pepsi_Sell',那么他们都会收到一个“ NO”标签;或者,如果我只有“ Pepsi_Sell”,那么它也会收到一个“ NO”。
我已经能够解析出基础的公司名称,然后对CASE WHEN转换产生的所有结果进行计数。现在,我开始着手下一步工作。
这是我的代码,如果可以帮助您提供一些上下文信息,请先感谢vm,感谢您对贤哲的见识!
SELECT UR.underlying_reference,
Count(*) AS NUMBER_MATCHES
FROM (SELECT CASE
WHEN Trade_Record IS NULL THEN NULL
WHEN Charindex('/', Trade_Record, 1) = 0 THEN
Substring(Trade_Record, (Charindex(' on ', Trade_Record
, 1)+4) , Charindex('.', Trade_Record, (Charindex(' on ',
Trade_Record,1)+4))
- (Charindex(' on ', Trade_Record, 1)+4))
+ '_' + BUY_SELL_FLAG
ELSE Substring(Trade_Record, (Charindex(' on ',
Trade_Record,1)+4),Charindex('/', Trade_Record,
(Charindex(' on ',
Trade_Record, 1)+4)) - (Charindex(' on ', Trade_Record,
1)+4))
+ '_' + BUY_SELL_FLAG
END AS UNDERLYING_REFERENCE
FROM tradeTable
WHERE recordDate = '6/29/2018'
AND BUY_SELL_FLAG IS NOT NULL) UR
GROUP BY UR.underlying_reference
ORDER BY UR.underlying_reference ASC
此表将是我想要的结果。我已经有了Company + BuySell领域,但是MatchingLogic是我要解决的问题
Company+BuySell Combine Matching Logic
PEPSI CO _Buy Y
PEPSI CO _Buy Y
PEPSI CO _Buy Y
PEPSI CO _Buy Y
PEPSI CO _Sell Sold
PEPSI CO _Sell Sold
COCA COLA_Sell Sold
COCA COLA_Sell Sold
COCA COLA_Sell Sold
COCA COLA_Sell Sold
MCDs_Buy N
MCDs_Buy N
MCDs_Buy N
MCDs_Buy N
MCDs_Buy N
MCDs_Buy N
DRP_Buy Y
DRP_Sell Sold
DRP_Sell Sold
DRP_Sell Sold
DRP_Sell Sold
DRP_Sell Sold
DRP_Sell Sold
答案 0 :(得分:0)
我将使用ANSI / ISO标准窗口函数:
select t.*,
(case when num_buys = 0 or num_sells = 0 then 'No'
when buy_sell_flag = '_buy' then 'Yes'
when buy_sell_flag = '_sell' then 'Sold'
end) as derived_logic
from (select t.*,
sum(case when buy_sell_flag = '_buy' then 1 else 0 end) as num_buys,
sum(case when buy_sell_flag = '_sell' then 1 else 0 end) as num_sells
from t
) t;
子查询不是严格必需的,但我认为它使逻辑更具可读性。