基本上,我要做的是将许多表连接在一起以显示报告的总体数据.主表g,是我希望看到的详细程度. g与附加到其上的所有表格具有一对多关系. GROUP BY会消除这些重复吗?
我尝试过使用SELECT DISTINCT,但我不确定这是否是最佳解决方案.
这是我正在运行的sql的输出ORA-00904:“a”.“akey”:无效的标识符.
SELECT a.afield123 ORDER_QTY,b.bfield123 MANUF,c.cfield123 ORDER_DATE,d.dfield123 PATIENT_CREATE_DATE,e.efield123 PAYOR_CLASS,f.ffield123 ID FROM schema123.a12345 a,schema123.b12345 b,schema123.c12345 c,schema123.d12345 d,schema123.e12345 e,schema123.f12345 f,LEFT JOIN schema123.g12345 g ON (a.akey = b.akey AND c.ckey = d.ckey AND e.ekey = f.ekey)
这是一些示例数据
G表(主表)
主键:gfield123
外键:akey,bkey,ckey,dkey,ekey,fkey,hkey
gfield123 gfield124 akey bkey ckey dkey ekey fkey hkey 1 8/1/2017 1234 2234 3234 4234 5234 6234 7234
一张桌子
主键:akey
外键:gfield123,bkey
akey afield123 gfield123 bkey 1234 20 1 2234 1235 40 1 2234
B表
主键:bkey
外键:gfield123,akey
bkey bfield123 gfield123 akey ckey 2234 COMPANY1 1 1234 3234
C表
主键:ckey
外键:gfield123,dkey
ckey cfield123 gfield123 bkey dkey 3234 8/5/2017 1 2234 4234
D表
主键:dkey
外键:gfield123,ekey
dkey dfield123 gfield123 ckey ekey 4234 7/1/2017 1 3234 5234
E表
主键:ekey
外键:gfield123,fkey
ekey efield123 gfield123 fkey 5234 MEDICARE 1 6234
F表
主键:fkey
外键:gfield123
fkey ffield123 gfield123 6234 ABC123 1
H表
主键:hkey
hkey hfield123 7234 9999
预期结果
gfield123 afield123 bfield123 cfield123 efield123 ffield123 hfield123 1 60 COMPANY1 8/5/2017 MEDICARE ABC123 9999
编辑:sql简化,数据样本,预期结果
解决方法
除非您发生聚合,否则通常不会使用分组. Distinct告诉我们您知道表连接中有重复项,并且您希望从结果中删除它们.
SELECT sum(a.afield123) as ORDER_QTY,b.bfield123 as MANUF,c.cfield123 as ORDER_DATE,d.dfield123 as PATIENT_CREATE_DATE,e.efield123 as PAYOR_CLASS,f.ffield123 as ID,g.gfield123 as gkey,g.hfield123 as hField123 FROM schema123.g12345 g LEFT JOIN schema123.a12345 a ON g.gkey = a.gkey LEFT JOIN schema123.b12345 b ON a.akey = b.akey AND g.gkey = b.gkey LEFT JOIN schema123.c12345 c ON b.bkey = c.bkey AND g.gkey = c.gkey LEFT JOIN schema123.d12345 d ON c.ckey = d.ckey AND g.gkey = d.gkey LEFT JOIN schema123.e12345 e ON d.dkey = e.dkey AND g.gkey = g.gkey LEFT JOIN schema123.f12345 f ON e.ekey = f.ekey AND g.gkey = g.gkey LEFT JOIN schema123.f12345 on g.hkey = h.hkey GROUP BY,g.hfield123 as hField123
注意我们
>取消了from子句中的逗号符号,这是89标准.是的,差不多30年前,92中有一个现在使用左/右,完全外部语法.>将g.field123 gkey添加到select如果没有选择任何内容时加入表的原因?>将g移动到from中的第一个条目(你想要G中的所有记录,只有那些与其他表链匹配的记录对吗?>为每个连接放置一个左连接和一个on子句.>我对齐了代码,以便在select中看到我们是否遗漏了a.>假设关键符号有意义.>假设加入g.gkey = a.akey,因为你没有说明g与其他表格的关系.>如果添加WHERE子句,则只能在那里添加对g的限制.>如果您需要限制其他表中的值,请在连接本身上使用AND,例如和d.dfield123> = to_date(‘2017-01-01′,’YYYY-MM-DD’),因此只有患者在2017秀.