按3列分组:"每个按表达式分组必须包含至少一个不是外部引用的列"

时间:2017-04-19 20:44:41

标签: sql sql-server group-by

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

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

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

......我想得到"表B"下面:

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

(我需要最后一栏"计算"每行1,以备日后使用)

当我尝试使用A,B,C""我收到标题中提到的错误。任何帮助将不胜感激!

仅供参考,我不认为这确实改变了这个问题,但是"表A"从另一个表中获得:" SOURCE_TABLE",得益于对类型的查询:

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

我需要建立"表B"只有一个查询。

2 个答案:

答案 0 :(得分:1)

我认为你的目标是使用不同的

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

答案 1 :(得分:0)

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

CASE

重新阅读你的问题之后,似乎你根本就没有计算,只是把一个" 1"在每个不同的行之后。如果是这样,那么你可以试试:

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

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

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