现有一数据库表
订购单payment (KEY: ORDER)
订购员(ORDER)、定金_现金(D_CASH)、定金_汇款(D_TRANSFER)、定金_有价证券(D_DRAFT)、定金_抵押(D_OFFSET)、未付_现金(W_CASH)、未付_汇款(W_TRANSFER)、未付_有价证券(W_DRAFT)、未付_抵押(W_OFFSET)
数据例:
1001 100 0 0 0 0 0 0 0
1002 0 0 0 0 100 0 0 0
1003 0 100 0 0 0 0 100 0
1004 1 2 3 4 5 6 7 8
要求:
① 抽出数据为如下形式
② 订购员(ORDER)、类型(BTYPE)、现金(CASH)、汇款(TRANSFER)、有价证券(DRAFT)、抵押(OFFSET)
其中:定金的类型为1 未付的类型为2
③ 定金、未付的相应数据全部为0时 不抽出
按上面要求 则上面数据例的最终结果应该为
1001 1 100 0 0 0
1002 2 100 0 0 0
1003 1 0 100 0 0
1003 2 0 0 100 0
1004 1 1 2 3 4
1004 2 5 6 7 8
这个SQL应该怎样写?(好像就是行列转换)
订购单payment (KEY: ORDER)
订购员(ORDER)、定金_现金(D_CASH)、定金_汇款(D_TRANSFER)、定金_有价证券(D_DRAFT)、定金_抵押(D_OFFSET)、未付_现金(W_CASH)、未付_汇款(W_TRANSFER)、未付_有价证券(W_DRAFT)、未付_抵押(W_OFFSET)
数据例:
1001 100 0 0 0 0 0 0 0
1002 0 0 0 0 100 0 0 0
1003 0 100 0 0 0 0 100 0
1004 1 2 3 4 5 6 7 8
要求:
① 抽出数据为如下形式
② 订购员(ORDER)、类型(BTYPE)、现金(CASH)、汇款(TRANSFER)、有价证券(DRAFT)、抵押(OFFSET)
其中:定金的类型为1 未付的类型为2
③ 定金、未付的相应数据全部为0时 不抽出
按上面要求 则上面数据例的最终结果应该为
1001 1 100 0 0 0
1002 2 100 0 0 0
1003 1 0 100 0 0
1003 2 0 0 100 0
1004 1 1 2 3 4
1004 2 5 6 7 8
这个SQL应该怎样写?(好像就是行列转换)
select ORDER, 2 status, W_CASH, W_TRANSFER, W_DRAFT, W_OFFSET from payment where nvl(W_CASH,0)>0 and nvl(W_TRANSFER,0)>0 and nvl(W_DRAFT,0) >0 and nvl(W_OFFSET, 0)
select ORDER, 2 status, W_CASH, W_TRANSFER, W_DRAFT, W_OFFSET from payment where nvl(W_CASH,0)>0 and nvl(W_TRANSFER,0)>0 and nvl(W_DRAFT,0) >0 and nvl(W_OFFSET, 0)>0
from payment where not(d_cash=0 and d_transfer=0 and d_draft=0 and d_offset=0)
union all
select order1,2,w_cash,w_transfer ,w_draft,w_offset
from payment where not(w_cash=0 and w_transfer=0 and w_draft=0 and w_offset=0)
order by 1,2