Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 具有右外部联接的分组依据_Sql_Oracle11g_Group By_Right Join - Fatal编程技术网

Sql 具有右外部联接的分组依据

Sql 具有右外部联接的分组依据,sql,oracle11g,group-by,right-join,Sql,Oracle11g,Group By,Right Join,需要将group by和右外部联接合并 表a分为“a”、“b”、“c”、“d”组 表b有:12 | a,2 | b,1 | a 5 | b 3 | d几次 我将表格B分组为小组的视图,如下所示: 视图b:13 | a 7 | b 3 | d 如您所见,组“c”不在表B中,也不在视图B中。我需要一些像这样的外部连接: select right outer join TableA on TableB.id = TableA.id join TableC on TableB.other_id = Ta

需要将group by和右外部联接合并

表a分为“a”、“b”、“c”、“d”组

表b有:12 | a,2 | b,1 | a 5 | b 3 | d几次

我将表格B分组为小组的视图,如下所示:

视图b:13 | a 7 | b 3 | d

如您所见,组“c”不在表B中,也不在视图B中。我需要一些像这样的外部连接:

select
right outer join TableA
on TableB.id = TableA.id
join TableC
on TableB.other_id = TableC.other_id
group by TableB.groups
null| null| c
userA| 13| a
userA| 7 | b
userA| 3 | d
userB| 10| a
userB| 70 | b
userB| 30 | d
SELECT usr.user_name,
       SUM (lg_all.new_values) AS group_sum,
       allw.group_name
FROM users usr, products lg_all, myGroup allw
      WHERE usr.user_id = lg_all.user_id 
      AND allw.group_id = lg_all.group_id 
   GROUP BY (usr.USER_ID, allw.group_name)
   ORDER BY usr.LOGONUSER_ID DESC
userA| 13| a
userA| 7 | b
userA| 3 | d
userB| 10| a
userB| 70 | b
userB| 30 | d
视图b 13 | a 7 | b 3 | d空值| c

我怎样才能做到

更新。 我明白了,这个简单的例子并没有描述复杂性。 此外,我还有第三个表“用户” 因此,为每个用户分组,为每个TableA值分组。 范例

组“c”不在表B中(表B包含组的值) 当我尝试这样的查询时:

select
right outer join TableA
on TableB.id = TableA.id
join TableC
on TableB.other_id = TableC.other_id
group by TableB.groups
null| null| c
userA| 13| a
userA| 7 | b
userA| 3 | d
userB| 10| a
userB| 70 | b
userB| 30 | d
SELECT usr.user_name,
       SUM (lg_all.new_values) AS group_sum,
       allw.group_name
FROM users usr, products lg_all, myGroup allw
      WHERE usr.user_id = lg_all.user_id 
      AND allw.group_id = lg_all.group_id 
   GROUP BY (usr.USER_ID, allw.group_name)
   ORDER BY usr.LOGONUSER_ID DESC
userA| 13| a
userA| 7 | b
userA| 3 | d
userB| 10| a
userB| 70 | b
userB| 30 | d
我只是得到了这样的东西:

select
right outer join TableA
on TableB.id = TableA.id
join TableC
on TableB.other_id = TableC.other_id
group by TableB.groups
null| null| c
userA| 13| a
userA| 7 | b
userA| 3 | d
userB| 10| a
userB| 70 | b
userB| 30 | d
SELECT usr.user_name,
       SUM (lg_all.new_values) AS group_sum,
       allw.group_name
FROM users usr, products lg_all, myGroup allw
      WHERE usr.user_id = lg_all.user_id 
      AND allw.group_id = lg_all.group_id 
   GROUP BY (usr.USER_ID, allw.group_name)
   ORDER BY usr.LOGONUSER_ID DESC
userA| 13| a
userA| 7 | b
userA| 3 | d
userB| 10| a
userB| 70 | b
userB| 30 | d
但我需要:

|userA| 13| a
|userA| 7 | b
|userA| 3 | d
|userA| NULL| c
|userB| 10| a
|userB| 70 | b
|userB| 30 | d
|userB| NULL | c
|userA| 13| a
|userA| 7 | b
|userA| 3 | d
|userA| NULL| c
|userB| 10| a
|userB| 70 | b
|userB| 30 | d
|userB| NULL | c
更新_2 对不起,信息少了。我使用oracleg11 以下是架构示例的链接:

我的Sql查询(应该扩展)如下所示:

select
right outer join TableA
on TableB.id = TableA.id
join TableC
on TableB.other_id = TableC.other_id
group by TableB.groups
null| null| c
userA| 13| a
userA| 7 | b
userA| 3 | d
userB| 10| a
userB| 70 | b
userB| 30 | d
SELECT usr.user_name,
       SUM (lg_all.new_values) AS group_sum,
       allw.group_name
FROM users usr, products lg_all, myGroup allw
      WHERE usr.user_id = lg_all.user_id 
      AND allw.group_id = lg_all.group_id 
   GROUP BY (usr.USER_ID, allw.group_name)
   ORDER BY usr.LOGONUSER_ID DESC
userA| 13| a
userA| 7 | b
userA| 3 | d
userB| 10| a
userB| 70 | b
userB| 30 | d
我的结果如下所示:

select
right outer join TableA
on TableB.id = TableA.id
join TableC
on TableB.other_id = TableC.other_id
group by TableB.groups
null| null| c
userA| 13| a
userA| 7 | b
userA| 3 | d
userB| 10| a
userB| 70 | b
userB| 30 | d
SELECT usr.user_name,
       SUM (lg_all.new_values) AS group_sum,
       allw.group_name
FROM users usr, products lg_all, myGroup allw
      WHERE usr.user_id = lg_all.user_id 
      AND allw.group_id = lg_all.group_id 
   GROUP BY (usr.USER_ID, allw.group_name)
   ORDER BY usr.LOGONUSER_ID DESC
userA| 13| a
userA| 7 | b
userA| 3 | d
userB| 10| a
userB| 70 | b
userB| 30 | d
但我需要:

|userA| 13| a
|userA| 7 | b
|userA| 3 | d
|userA| NULL| c
|userB| 10| a
|userB| 70 | b
|userB| 30 | d
|userB| NULL | c
|userA| 13| a
|userA| 7 | b
|userA| 3 | d
|userA| NULL| c
|userB| 10| a
|userB| 70 | b
|userB| 30 | d
|userB| NULL | c

Thx.

您通常会使用
左连接来实现以下目的:

select a.col1, sum(b.col1)
from tableA a left join
     tableB b
     on a.col1 = b.col2
group by a.col1;

如果您特别想使用右连接:

SELECT 
  a.col, 
  SUM(b.col) as sumof
FROM 
  TableB b 
  RIGHT JOIN
  TableA a
  ON 
    b.col = a.col
GROUP BY
  a.col;
右连接要求“具有可靠数据的表”以单词“右连接”命名,而“具有缺少数据的表”则以单词“右连接”命名。。如果你喜欢这样想的话,没问题!我总是倾向于使用左连接,可能是因为我是从左到右写的,所以当我把SQL放在脑海中时,我会想“什么是所有的实心表…什么是有孔的表…”,然后我将“有数据孔的表”连接到“实心表”上,这样实心数据就在左边,在它上面,数据与孔连接在一起

i、 我认为从左到右。如果你从右向左思考,你可能更喜欢右边的实心桌子

更新:

您还没有真正弄清楚Users表的结构,但我假设这些表的结构是:

create table Users (user varchar)
create table tablea (groupname varchar)
create table tableb (groupname varchar, groupcount int)
因此,这个问题:

SELECT 
  u.user,
  a.groupname, 
  SUM(b.groupcount) as sumof
FROM 
  TableB b 
  RIGHT JOIN
  (
    SELECT * FROM
    TableA a
    CROSS APPLY
    users u
  ) a
  ON 
    b.groupname = a.groupname
GROUP BY
  u.username, a.groupname;
如果您的用户表和表A相关,请说明如何关联。最好还是把你的表结构贴出来。如果没有其他操作,请在SQL Server Management Studio中执行以下操作并发布屏幕截图:

SELECT * FROM users
SELECT * FROM tableA
SELECT * FROM tableB
如果数据是机密的,请访问SQLFiddle.com并制作一个具有代表性的示例,然后将URL发布到此处

更新2:

有一个小问题,您创建的模式与您发布的示例查询不匹配,但还有一个更大的问题:您发布的模式意味着用户和组之间除了通过product表之外没有任何关系。除了在交叉连接中混合所有用户和组,然后将产品链接到中之外,无法为用户和组提供具有值的行。你也没有在你的小提琴里放任何样本数据。你发短信给DDL了吗?它非常整洁:

SELECT 
  u.user_name,
  g.group_id,
  SUM(p.product_id) --you don't want to sum the id, but your schema doesnt have anything else!
FROM
  users u
  CROSS JOIN
  mygroup g

  LEFT JOIN
  products p
  ON
    u.user_id = p.user_id AND
    g.group_id = p.group_id

GROUP BY
  u.user_name,
  p.product_id

你试过正确的连接吗?thx,我已经创建了一个模式和我当前的sql查询。请。查看更新_2@MarkusSchnee情况越来越糟了o:)显然,我不能计算id;)但对我来说真正重要的信息是,当前的模式不能提供我需要的结果?我应该如何改变我的shema?老实说,我真的不确定,因为事物的命名并不能让我真正了解你是如何考虑对数据建模的。在我看来,用户和产品都可以分组。显然,这里分组的不是用户,而是产品,但是您的查询说您需要一个产品为空的所有用户和组的列表。现在,虽然一个产品有一个用户和一个组,但是用户和组之间没有关系,那么为什么我们需要一个查询,它必须发明用户组对,以便发现没有一个产品有用户组?