使用CTE的多个查询的SQL连接

时间:2018-07-11 19:44:36

标签: sql

WITH group1 AS 
(    
    SELECT 
        [column1],
        [column2]   
    FROM 
        table1
),
Group2 AS 
(
    SELECT
        (column3),  
        COUNT(column3) 
    FROM
        table 2 AS Count   
    WHERE
        (year (date_value) = 2018 and month(Date_vaLue) = 2)
    GROUP BY
        column2
)
SELECT *
FROM group1
JOIN group2 ON group1. table1 = group2.table2;

我收到一个错误:

  

未为“ group2”的第2列指定列名

由于这不是一列,而只是一个标识符,我很困惑为什么它认为代码(Group2 AS (Select (column3 ),)是一列。

我是sql的新手,所以这可能只是一个愚蠢的错误

Column 1是一个名称,第二列是该名称的唯一键

Column 2column 3包含相同的确切数据,我只是试图在第3列表(包括0)上显示它在数据库中出现的次数,并将其关联回列1.

column 3中的每个数据点仅包含来自column2的数据。

谢谢!

2 个答案:

答案 0 :(得分:0)

我认为您需要将列命名为COUNT(column3),所以...

Group2 AS (Select (column3 ),
COUNT (column3) as cntr
From table 2 as Count
Where (year (date_value) = 2018 and month(Date_vaLue) = 2)
Group by column2
)

答案 1 :(得分:0)

该查询有很多错误,我不知道从哪里开始

在cte中,每列都必须有一个名称。 select columnname将结果列命名为columnname。像count这样的聚合函数没有设置列名,因此第二个cte中的第二列没有名称,因为错误状态。使用

SELECT column, count(othercolumn) AS ctcol ...

如果没有聚合功能,则无法将不在分组中使用的列添加到选择列表中。此外,您无法将汇总和未汇总的列添加到选择列表中。但是我想那只是错字

SELECT column2, COUNT(column3) AS ctcol
FROM tablexy
...
GROUP BY column2

您的CTE没有任何名为table1table2的列,因此您的联接将不起作用。使用以cte命名的列

SELECT * FROM group1 JOIN group2 ON group1.column2 = group2.column2