Sql 以分组方式运行联合

Sql 以分组方式运行联合,sql,sql-server,Sql,Sql Server,我需要帮助与小组成员一起使用UNION 我写了下面的代码,你给你一个我的代码概述。我基本上是在和UNION一起运行这个代码超过x个月 每次我运行下面的代码时,SQLServer都会抱怨“Category”不在groupby中 我尝试在代码末尾添加以下内容: 按名称分组 点名 当我试图一次获取所有月份的数据时,它仍然不起作用 如何使查询使用UNION子句运行 SELECT '2000' AS Year, Name AS Category, COUNT(id) AS X FRO

我需要帮助与小组成员一起使用UNION

我写了下面的代码,你给你一个我的代码概述。我基本上是在和UNION一起运行这个代码超过x个月

每次我运行下面的代码时,SQLServer都会抱怨“Category”不在groupby中

我尝试在代码末尾添加以下内容:

按名称分组 点名

当我试图一次获取所有月份的数据时,它仍然不起作用

如何使查询使用UNION子句运行

SELECT
   '2000' AS Year,
    Name AS Category,
    COUNT(id) AS X
FROM
(          
    (
        Select id, Name
        From dbo.tablea
        where something
        GROUP BY id,name
        HAVING SUM(X)>0
    ) sub

    Union 

    SELECT 
        '1999' AS Year,
        Name AS Category,
        COUNT(id) AS X
    FROM
    (          
        (
            Select id, Name
            From dbo.tablea
            where something
            GROUP BY id,name
            HAVING SUM(X)>0
        ) sub

让我们看一下查询的第一部分:

SELECT '2000' AS Year, Name AS Category, COUNT(id) AS X
FROM
(
  Select id, Name
  From dbo.tablea
  where ...
  GROUP BY id, Name
  HAVING SUM(X)>0
) sub
(我删除了一个不属于那里的左括号。)

这里使用聚合(
COUNT(id)
,这与简单的
COUNT(*)
相同,因为id永远不应该为null)。那么,您还选择了哪些其他字段?一个字面值为“2000”,这是可以的,还有名字。但是哪个名字?最大值?敏?您没有指定它,这是DBMS告诉您的。因此,可以对名称使用聚合,例如
MIN(Name)
或按名称分组(通过在“子”别名后添加
group by Name
),以便每个名称获得一行

以下是按名称分组的完整查询:

SELECT '2000' AS Year, Name AS Category, COUNT(id) AS X
FROM
(
  Select id, Name
  From dbo.tablea
  where ...
  GROUP BY id, Name
  HAVING SUM(X)>0
) sub
GROUP BY Name
UNION
SELECT '1999' AS Year, Name AS Category, COUNT(id) AS X
FROM
(
  Select id, Name
  From dbo.tablea
  where ...
  GROUP BY id, Name
  HAVING SUM(X)>0
) sub
GROUP BY Name;

您的
分组依据
没有列名。将代码修改为
按名称分组
。我知道这一点。我写在这里不是为了节省时间。写下完整的查询,这样我们就能找到答案solution@dataaddicted“我写这篇文章不是为了节省时间”以牺牲读者的时间为代价来节省时间是不可能得到有效答案的。。。