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

Sql 字符串聚合并与另一个表列联接,sql,oracle,join,aggregate-functions,business-intelligence,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 di

我有以下表格:

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
我主要有两个交易表,即
协议交易
(存储协议)和
称重交易
(仅存储在
协议交易
中的产品称重)还有一些目录保存代码实际名称的查找,如
bank\u cd
bank\u dir
中查找实际的
bank\u name
farmer\u id
registered\u farmer\u id
payment\u farmer\u id
具有相同的列值。我需要的是
过期的
范围如下:

Sl.No  farmer_name  Sy_nos  village  taluka  district  payment_farmer_id  payment_account_no  bank_name  bank_branch  sum(net_wt)
每个
plot\u no
都有一个
sy\u no
,当我选择
sum(net\u wt)
作为与每个
plot\u no
相关的
net\u wt
时,我需要连接所有
sy\u 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

但是没有得到我想要的。

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

  • 第一个子查询看起来不错
  • 第二个子查询是错误的。您可以再次选择“协议传输”,但使用相同的别名。此外,您可以与w.plot\u no进行比较,但没有w表。(我想你是想把内部协议命名为_tran w?)
  • 在第二个子查询中,GROUPBY子句毫无意义。移除它
  • 你不整理结果是故意的吗?上面是对行进行编号,但在查询结束时没有order by,这可能会导致随机顺序
  • 您的查询将显示所有协议、其农民的姓名、具有相同地块编号的所有协议的所有sy nos,以及在特定时间段内具有相同地块编号的所有净重之和。请检查这是否符合您的期望。是否确实要选择所有协议,或者更确切地说,选择所有绘图

    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的时间和耐心

    @Rachcha我输入了我目前为止尝试的内容。请看一看不。。我只需要“称重”中的记录。我有点糊涂了,怎么办!您可以选择“从协议中”。这将提供该表中的所有记录。如果您改为从weighment_tran记录,则可以从该表中选择或加入该表,或者使用IN或EXISTS子句将结果限制在该表中。这很难提供帮助,因为我们不知道您的表是如何关联的。你加入了plot_no,但似乎连一张图表都没有,这不是我所怀疑的。表的键是什么?是什么使记录独一无二?地块编号的含义是什么?农民id和地块编号是关键。绘图编号是分配给每个绘图的唯一编号。一个农民身份证可能有多块地块,这些地块仍然不清楚。很抱歉有农民A、B、C,还有地块1、2、3。表称重可包含A1、A2、B2、B3条目和C3条目。该表没有唯一的键。表A中可能有A2、A3、B1的条目,B3有两个条目,C1和C3有两个条目。这个表也没有唯一的键。那么每个地块都有一个唯一的SYU编号,比如地块1为100,地块2为200,地块3为300。到目前为止是吗?你注意到你让我们猜了吗?既不清楚表之间是如何关联的,也不清楚要确切显示什么。阴谋?农民?协议?