字符串聚合并与另一个表列连接

时间:2014-01-18 12:04:19

标签: sql oracle join aggregate-functions business-intelligence

我有以下表格:

weighment_tran
    village_cd
    farmer_id
    registered_farmer_id
    plot_no
    out_date
    net_wt

village_dir
    village_cd
    village_name
    taluka_cd
    district_cd

taluka_dir
    taluka_cd
    taluka_name

district_dir
    district_cd
    district_name

farmer_dir
    farmer_id
    first_name
    middle_name

agreement_tran
    farmer_id
    registered_farmer_id
    payment_farmer_id
    plot_no
    main_sy_no
    payment_bank_cd
    payment_account_no

bank_dir
    bank_cd
    bank_name
    bank_branch

主要是我有两个交易表,即agreement_tran(存储协议)和weighment_tran(仅存储agreement_tran中存在的产品的权重),其他表是那些查找实际的目录bank_cd等代码的名称代表bank_name中的实际bank_dirfarmer_idregistered_farmer_idpayment_farmer_id具有相同的列值。我需要的是out_date范围:

Sl.No  farmer_name  Sy_nos  village  taluka  district  payment_farmer_id  payment_account_no  bank_name  bank_branch  sum(net_wt)

每个plot_no都有sy_no,我需要连接所有sy_no,因为我选择sum(net_wt)作为net_wt关注每个plot_no }。

我试过像 -

这样的东西
select row_number() over (order by a.payment_farmer_id),
        a.payment_farmer_id, 
(select f.first_name ||' '|| f.middle_name as name
        from farmer_dir f 
        where a.payment_farmer_id=f.farmer_id),
(select wm_concat(main_sy_no) from agreement_tran a 
        where a.plot_no=w.plot_no),
(select sum(net_wt)
        from weighment_tran w
        where (w.plot_no = a.plot_no)
        and (w.season_cd = 9) and trunc(w.out_date) between 
        to_date('22-12-2013','dd-mm-yyyy') and to_date('23-12-2013','dd-mm-yyyy') 
        group by a.payment_farmer_id)
from agreement_tran a

但没有得到我想要的东西。

2 个答案:

答案 0 :(得分:1)

您的查询中似乎存在一些错误:

  1. 第一个子查询看起来没问题。
  2. 第二个子查询是错误的。您第二次选择agreement_tran但使用相同的别名。此外,你与w.plot_no比较,但没有w表。 (我想你的意思是命名内部的agreement_tran w?)
  3. 在你的第二个子查询中,group by子句毫无意义。删除它。
  4. 您是否故意不对结果进行排序?您在上面为您的行编号,但在查询结尾处您没有订单,这可能会导致随机订单。
  5. 您的查询显示所有协议,其农民的姓名,所有具有相同地块编号的协议的所有系数,以及在特定时间段内具有相同地块编号的所有净重的总和。请检查这是否符合您的期望。您是否真的想要选择所有协议或者更确切地说是所有情节?

答案 1 :(得分:0)

SELECT Sum(WEIGHMENT_TRAN.NET_WT), 
AGREEMENT_TRAN.PAYMENT_FARMER_ID, 
wm_concat(Distinct (agreement_tran.main_sy_no)) as Sy_no,
wm_concat(Distinct (village_dir.village_name)) as Village,
farmer_dir.first_name || ' ' || farmer_dir.middle_name as Farmer_name,     taluka_dir.taluka_name, district_dir.district_name, bank_dir.bank_name, bank_dir.bank_branch,  agreement_tran.payment_account_no, weighment_tran.registered_farmer_id
FROM AGRI.AGREEMENT_TRAN AGREEMENT_TRAN,
AGRI.village_dir village_dir, 
AGRI.WEIGHMENT_TRAN WEIGHMENT_TRAN, 
agri.farmer_dir farmer_dir, agri.taluka_dir taluka_dir, 
agri.district_dir district_dir, agri.bank_dir bank_dir
WHERE AGREEMENT_TRAN.PLOT_NO = WEIGHMENT_TRAN.PLOT_NO AND
((AGREEMENT_TRAN.SEASON_CD=9) AND (WEIGHMENT_TRAN.SEASON_CD=9) AND 
(trunc(weighment_tran.out_date) Between to_date('22-12-2013','dd-mm-yyyy')
And to_date('22-12-2013','dd-mm-yyyy')) AND
(AGREEMENT_TRAN.PLOT_NO=weighment_tran.plot_no) AND     (WEIGHMENT_TRAN.VILLAGE_CD=village_dir.village_cd)) and   agreement_tran.payment_farmer_id=farmer_dir.farmer_id and    village_dir.taluka_cd=taluka_dir.taluka_cd and    village_dir.district_cd=district_dir.district_cd and    agreement_tran.payment_bank_cd=bank_dir.bank_cd
GROUP BY AGREEMENT_TRAN.PAYMENT_FARMER_ID, farmer_dir.first_name, farmer_dir.middle_name, taluka_dir.taluka_name, district_dir.district_name,bank_dir.bank_name, bank_dir.bank_branch, agreement_tran.payment_account_no, weighment_tran.registered_farmer_id
Order by bank_dir.bank_name, bank_dir.bank_branch

最后,我为我的长期努力而感谢,并感谢@Thorsten耐心等待。