證券結算的,分平倉和不平倉, SQL怎么寫?

[复制链接]
查看11 | 回复8 | 2011-11-1 16:20:28 | 显示全部楼层 |阅读模式
其實就是證券用來結算的,分平倉和不平倉。
用SQL將第一個表轉換成第二個表.
SecurityID,Qty
1,300
1,-100
2,500
3,-700
3,-100
3,600
=================
result
=================
SecurityID,BuyQty,SellQty
1,100,100
1,200,0
2,500,0
3,600,600
3,0,-200

請問這個SQL怎么寫?
回复

使用道具 举报

千问 | 2011-11-1 16:20:28 | 显示全部楼层
我没看明白,能解释下吗
回复

使用道具 举报

千问 | 2011-11-1 16:20:28 | 显示全部楼层
我觉得用第二个生成第一个还有可能,用第一个生成第二个,好像还缺点条件
回复

使用道具 举报

千问 | 2011-11-1 16:20:28 | 显示全部楼层
數量相等的一買一賣叫平倉,除去平倉的數量后,最后結果為正數就是長倉, 負數就是短倉

平倉
長倉
短倉
證券1
100
200
0
證券2
0
500
證券3
600
0
-200
[ 本帖最后由 EricYeung 于 2008-8-12 17:17 编辑 ]
回复

使用道具 举报

千问 | 2011-11-1 16:20:28 | 显示全部楼层
lz
说清楚计算的逻辑
回复

使用道具 举报

千问 | 2011-11-1 16:20:28 | 显示全部楼层
平仓那个不太好写啊!
回复

使用道具 举报

千问 | 2011-11-1 16:20:28 | 显示全部楼层
学习。。
回复

使用道具 举报

千问 | 2011-11-1 16:20:28 | 显示全部楼层
不知能满足不
select securityid, least(abs(c), abs(d)), 长仓, 短仓
from (select securityid, sum(a) c, sum(b) d, 长仓, 短仓

from (select securityid,

case

when qty0 then

sum(qty) over(partition by securityid, qty)

else

0

end b,

case

when sum(qty) over(partition by securityid) > 0 then

sum(qty) over(partition by securityid)

else

0

end 长仓,

case

when sum(qty) over(partition by securityid) 0 Then BuyQty+SellQty

Else 0 End BuyQty,

Case When BuyQty+SellQty>0 Then 0

Else BuyQty+SellQty End SellQty
From
(Select SecurityID,sum(BuyQty) BuyQty,sum(SellQty) SellQty From
(select SecurityID,
  case when Qty > 0 Thenqty Else 0 End BuyQty ,
Case When qty =abs(SellQty) Then abs(SellQty)

Else abs(BuyQty) End SellQty
From
(Select SecurityID,sum(BuyQty) BuyQty,sum(SellQty) SellQty From
(select SecurityID,
  case when Qty > 0 Thenqty Else 0 End BuyQty ,
Case When qty < 0 Thenqty Else 0 End SellQty
From orders )
Group BySecurityID)
回复

使用道具 举报

千问 | 2011-11-1 16:20:28 | 显示全部楼层
thanks for you replies
studying ....
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行