Sql 以分组方式运行联合
我需要帮助与小组成员一起使用UNION 我写了下面的代码,你给你一个我的代码概述。我基本上是在和UNION一起运行这个代码超过x个月 每次我运行下面的代码时,SQLServer都会抱怨“Category”不在groupby中 我尝试在代码末尾添加以下内容: 按名称分组 点名 当我试图一次获取所有月份的数据时,它仍然不起作用 如何使查询使用UNION子句运行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
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“我写这篇文章不是为了节省时间”以牺牲读者的时间为代价来节省时间是不可能得到有效答案的。。。