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