Sql 合并空值
我需要合并第一行和第二行。第三排和第四排。下面是我已经得到的。 因为货币为空,所以不合并 下面是我当前的代码。那么如何合并它们呢Sql 合并空值,sql,oracle10g,Sql,Oracle10g,我需要合并第一行和第二行。第三排和第四排。下面是我已经得到的。 因为货币为空,所以不合并 下面是我当前的代码。那么如何合并它们呢 SELECT decode(substr(o.tran_no,1,1), 'B', 'BUY', 'S', 'SELL') BS_IND, COUNT(decode(substr(o.tran_no,1,1), 'B', 'BUY')) BUY, COUNT(decode(substr(o.tran_no,1,1),'S', 'SELL')) SEL
SELECT
decode(substr(o.tran_no,1,1), 'B', 'BUY', 'S', 'SELL') BS_IND,
COUNT(decode(substr(o.tran_no,1,1), 'B', 'BUY')) BUY,
COUNT(decode(substr(o.tran_no,1,1),'S', 'SELL')) SELL,
DECODE(D.CURRENCY,NULL,'MYR','MYR') CURRENCY3,
DECODE(D.CURRENCY,'MYR',1,NULL,1,0) CUR,
o.client_no,
D.CURRENCY
FROM
bos_m_ledger o, bos_m_para r, bos_m_client c, bos_cltype g, BOS_M_STOCK D
WHERE
r.para_type = 'BRANCH'
AND R.PARA_CODE = O.BRANCH_CODE
and o.client_no = c.client_no
AND O.STOCK_NO = D.STOCK_NO
and g.nbrk_rate = 1
AND CSTAMP_EXPIRY_DATE IS NOT NULL
and c.client_type = g.client_type
and o.tdr_code = c.tdr_code
and o.tran_type = 'CON'
AND C.CLIENT_NO ='3JF0391'
AND C.TDR_CODE >= 'DA1'
AND C.TDR_CODE <= 'ZZZZZZ'
group by
substr(o.tran_no,1,1), o.client_no, o.branch_code, r.descr, c.client_name,
C.TDR_CODE, D.CURRENCY, NVL(D.EXCH_CODE,0)
ORDER BY
O.BRANCH_CODE, C.TDR_CODE, O.CLIENT_NO
选择
解码(substr(o.tran_no,1,1),'B','BUY','S','SELL')BS_IND,
计数(解码(子序列(o.tran_no,1,1),‘B’,‘购买’)购买,
计数(解码(substr(o.tran_no,1,1),'S','SELL'))出售,
解码(D.货币,空,'MYR','MYR')货币3,
解码(D.货币,'MYR',1,NULL,1,0)CUR,
o、 客户号:,
D.货币
从…起
会计科目o、会计科目r、会计科目c、会计科目g、会计科目D
哪里
r、 para_类型=‘分支’
R.PARA_代码=O.BRANCH_代码
o.client_no=c.client_no
O.STOCK_NO=D.STOCK_NO
和g.nbrk_比率=1
CSTAMP_到期日不为空
c.client_type=g.client_type
和o.tdr_代码=c.tdr_代码
和o.tran_type='CON'
和C.CLIENT_NO='3JF0391'
和C.TDR_代码>='DA1'
和C.TDR_代码使用聚合:
SELECT (CASE WHEN o.tran_no LIKE 'B%' THEN 'BUY'
WHEN o.tran_no LIKE 'S%' THEN 'SELL'
END) as BS_IND,
SUM(CASE WHEN o.tran_no LIKE 'B%' THEN 1
ELSE 0
END) as Buy,
SUM(CASE WHEN o.tran_no LIKE 'S%' THEN 1
ELSE 0
END) as sell,
COALESCE(D.CURRENCY, 'MYR') as CURRENCY3,
(CASE WHEN(D.CURRENCY = 'MYR' OR D.CURRENCY IS NULL THEN 1 ELSE 0 END) as Cur)
o.client_no, D.CURRENCY
FROM bos_m_ledger o JOIN
bos_m_para r
ON R.PARA_CODE = O.BRANCH_CODE JOIN
bos_m_client c
ON o.client_no = c.client_no AND o.tdr_code = c.tdr_code JOIN
bos_cltype g
ON c.client_type = g.client_type
BOS_M_STOCK D
ON O.STOCK_NO =D.STOCK_NO
WHERE r.para_type='BRANCH' AND
g.nbrk_rate = 1 AND
CSTAMP_EXPIRY_DATE IS NOT NULL AND
o.tran_type = 'CON' AND
C.CLIENT_NO='3JF0391' AND
C.TDR_CODE >='DA1' AND
C.TDR_CODE <='ZZZZZZ'
group by (CASE WHEN o.tran_no LIKE 'B%' THEN 'BUY'
WHEN o.tran_no LIKE 'S%' THEN 'SELL'
END),
o.client_no
ORDER BY O.CLIENT_NO;
选择(o.tran_不喜欢“B%”的情况下,然后选择“购买”
当o.tran_不喜欢“S%”时,则“卖出”
(完)作为BS_IND,
总和(o.tran_不喜欢“B%”的情况下,则为1
其他0
结束)作为购买,
总和(o.tran_不喜欢“S%”的情况下,则为1
其他0
结束)作为销售,
合并(D.货币,“MYR”)为货币3,
(当(D.CURRENCY='MYR'或D.CURRENCY为空,则为1,否则为0结束)作为Cur时的情况)
o、 客户号,D.货币
从bos_m_ledger加入
博斯穆帕拉
关于R.PARA_码=O.BRANCH_码连接
bos_m_客户c
在o.client_no=c.client_no和o.tdr_code=c.tdr_code连接上
bos_CLG型
在c.client\u type=g.client\u type上
BOS_M_股票D
O.库存编号=D.库存编号
其中r.para_type='BRANCH'和
g、 nbrk_费率=1,且
CSTAMP_到期日不为空,并且
o、 传输类型='CON'和
C.客户号为3JF0391,且
C.TDR_代码>='DA1'和
C.TDR_代码您可以在sql的顶部为我们提供此代码
with tab as
(select 'buy' bs_i, 10 buy, 0 sell, 'myr' cur, 1 cur1, '3jfo391' client, 'myr' currency
union all
select 'buy' bs_i, 11 buy, 0 sell, 'myr' cur, 1 cur1, '3jfo391' client, null currency
union all
select 'sell' bs_i, 0 buy, 11 sell, 'myr' cur, 1 cur1, '3jfo391' client, 'myr' currency
union all
select 'sell' bs_i, 0 buy, 10 sell, 'myr' cur, 1 cur1, '3jfo391' client, null currency
)
select bs_i, sum(buy), sum(sell), max(cur), max(cur1), max(client), max(currency)
from tab
group by bs_i;
o/p:
我得到了和我第一张照片一样的结果。我需要的是图2,其中“购买”的货币“MYR”将变为一行。还有一行是“卖出”。我的朋友建议使用decode(nvl),但我不知道该怎么做。我使用您的代码只做了一点点更改就得到了结果,但是我需要找到其他方法来确保结果将显示'MYR'而不是cur'sum(当D.CURRENCY='MYR'或D.CURRENCY为NULL时,则为1或0 END)作为cur,“我不能这样使用,因为只有样本客户号。我有数千个数据。
bs_i sum sum max max max max
buy 21 0 myr 1 3jfo391 myr
sell 0 21 myr 1 3jfo391 myr