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。到目前为止是吗?你注意到你让我们猜了吗?既不清楚表之间是如何关联的,也不清楚要确切显示什么。阴谋?农民?协议?