【问题标题】:SQL Group By not working in JoinSQL Group By 未在 Join 中工作
【发布时间】:2017-07-27 18:01:08
【问题描述】:

我遇到了 GROUP BY 函数的问题。我尝试将 DISTINCT 函数用于我的目的,但我的所有搜索都让我尝试使用 GROUP BY 函数。

我有 3 张桌子。 Tbl1 和 Tbl2 具有相同的列。 Tbl 3 有不同的列,但我实际上是在尝试将所有 3 个表连接在一起,这个查询可以正确执行。

但是,我希望结果集排除其中一列 Tbl3.A 中的重复项

我收到错误:选择列表中的“DB1.dbo.Tbl2.C”列无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。

这是完整的查询:

SELECT Tbl3.A, Tbl1.C, Tbl1.B
FROM DB1.dbo.Tbl1
LEFT JOIN
DB2.dbo.Tbl3 ON Tbl1.B = Tbl3.A
WHERE ….

UNION

SELECT Tbl3.A, Tbl2.C, Tbl2.B
FROM DB1.dbo.Tbl2 
LEFT JOIN 
DB2.dbo.Tbl3 ON Tbl2.B = Tbl3.A

WHERE …..

GROUP BY Tbl3.A

【问题讨论】:

  • 使用您正在使用的数据库进行标记。
  • 如果要按 Tbl3.A 分组,则必须聚合列 Tbl1.C 和 Tbl1.B。

标签: sql


【解决方案1】:

使用子查询。像这样的:

SELECT A, MAX(C) as C, MAX(B) as B
FROM ((SELECT Tbl3.A, Tbl1.C, Tbl1.B
       FROM DB1.dbo.Tbl1 LEFT JOIN
            DB2.dbo.Tbl3
            ON Tbl1.B = Tbl3.A
       WHERE ….
      ) UNION
      (SELECT Tbl3.A, Tbl2.C, Tbl2.B
       FROM DB1.dbo.Tbl2  LEFT JOIN 
            DB2.dbo.Tbl3
            ON Tbl2.B = Tbl3.A
       WHERE …..
     )
    ) t
GROUP BY A;

【讨论】:

  • @TomD 。 . .然后用as给它们起不同的名字。
【解决方案2】:
SELECT NewTbl3.A, Tbl1.C, Tbl1.B
FROM DB1.dbo.Tbl1
LEFT JOIN
(SELECT DISTINCT Tbl3.A) AS NewTbl3
ON Tbl1.B = NewTbl3.A
WHERE ….

UNION

SELECT NewTbl3.A, Tbl2.C, Tbl2.B
FROM DB1.dbo.Tbl2 
LEFT JOIN
(SELECT DISTINCT Tbl3.A) AS NewTbl3
ON Tbl2.B = NewTbl3.A

WHERE …..

GROUP BY NewTbl3.A

【讨论】:

    猜你喜欢
    • 2013-03-12
    • 2011-06-02
    • 2020-01-08
    • 2014-08-31
    • 2016-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多