【问题标题】:Group by 3 columns: "Each group by expression must contain at least one column that is not an outer reference"按 3 列分组:“每个按表达式分组必须包含至少一列不是外部引用”
【发布时间】:2017-09-16 06:33:15
【问题描述】:

我知道已经有人问过有关此错误消息的问题,但我找不到任何真正适合我的问题的问题。

我有一个包含不同值的三列(A、B、C)的表,我需要识别所有相同的组合。例如下面的“TABLE A”:

| A | B | C |
| 1 | 2 | 3 |
| 1 | 3 | 3 |
| 1 | 2 | 3 |
| 2 | 2 | 2 |
| 1 | 3 | 3 |

...我也想得到下面的“TABLE B”:

| A | B | C | count |
| 1 | 2 | 3 |   1   |
| 1 | 3 | 3 |   1   |
| 2 | 2 | 2 |   1   |

(我需要最后一列“count”,每行有 1 以供以后使用)

当我尝试使用“按 A、B、C 分组”时,我得到了标题中提到的错误。任何帮助将不胜感激!

仅供参考,我认为这并没有真正改变问题,但是“TABLE A”是从另一个表中获得的:“SOURCE_TABLE”,这要归功于以下类型的查询:

select (case when ... ),(case when ...),(case when ...) from SOURCE_TABLE

我需要只用一个查询来构建“表 B”。

【问题讨论】:

  • 您可以发布您尝试过的确切查询吗?
  • 您在第一个表中有两次 '1, 2, 3' 和 '1, 3, 3' 并且在所需结果表中该行的“计数”为“1”。这是一个错误,还是你真的想要每个独特排列后的“1”?如果是这样,那就不算什么了!
  • 您使用的是哪个 DBMS?后格雷斯?甲骨文?
  • 我正在研究 SQL Server Management Studio,它应该是每行 1,我在这个阶段没有计算任何东西。下面 Stugus 的解决方案帮助我解决了我的问题。感谢您的支持!

标签: sql sql-server group-by


【解决方案1】:

我认为你所追求的是使用 distinct

select distinct A,B,C, 1 [count]   -- where 1 is a static value for later use
    from (select ... from  sourcetable) X

【讨论】:

    【解决方案2】:

    听起来你的想法是对的。我的猜测是由于您的 CASE 语句中的外部引用而发生错误。如果您将第一个查询包装在另一个查询中,则可能会缓解此问题。试试:

    SELECT A, B, C, COUNT(*) AS [UniqueRowCount]
    FROM (
        SELECT (case when ... ) AS A, (case when ...) AS B, (case when ...) AS C FROM SOURCE_TABLE
    ) AS Subquery
    GROUP BY A, B, C
    

    重新阅读您的问题后,您似乎根本没有数数,只是在每个不同的行后面加上一个“1”。如果是这种情况,那么您可以尝试:

    SELECT DISTINCT A, B, C, [Count]
    FROM (
        SELECT (case when ... ) AS A, (case when ...) AS B, (case when ...) AS C, 1 AS [Count] FROM SOURCE_TABLE
    ) AS Subquery
    

    假设您的外部引用异常仅发生在您的聚合中,您也应该简单地尝试:

    SELECT DISTINCT (case when ... ) AS A, (case when ...) AS B, (case when ...) AS C, 1 AS [Count] FROM SOURCE_TABLE
    

    【讨论】:

    • 非常感谢,它就是这样工作的 :) 我是 SQL 的初学者,如果您有时间,我想知道您能否解释一下“外部引用”问题到底是什么?
    • @raphael.cardinaux 很难解释。我相信你为什么会出错的概念可以很好地解释here。另外,不要忘记接受答案。
    猜你喜欢
    • 2020-05-10
    • 2015-10-18
    • 1970-01-01
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多