sql - 使用 where 和 groupby 进行子选择 SQL 查询

标签 sql sql-server t-sql

当我在 SQL Server 中尝试以下代码时,

SELECT       
dbo.Category.CatNo as Category, 
dbo.Category.Categaory as Name, 
(select SUM(dbo.SALES.SELLINC) where (dbo.SALES.DATE BETWEEN '2016-07-17' AND '2016-07-23')) AS ActualSales, 
(select SUM(dbo.SALES.SELLINC) where (dbo.SALES.DATE BETWEEN '2015-07-19' AND '2015-07-25')) AS LastYrVariance,
(select SUM(dbo.SALES.SELLINC) where (dbo.SALES.DATE BETWEEN '2016-01-01' AND '2016-09-05')) AS YrToDateActual,
(select SUM(dbo.SALES.SELLINC) where (dbo.SALES.DATE BETWEEN '2015-01-01' AND '2015-09-05')) AS LastYrToDateActual  
FROM dbo.Category INNER JOIN
     dbo.Dissection ON dbo.Category.CatNo = dbo.Dissection.CatNo INNER JOIN
     dbo.Division ON dbo.Dissection.DivNo = dbo.Division.ID INNER JOIN
     dbo.Departments ON dbo.Dissection.DeptNo = dbo.Departments.DeptID INNER JOIN
     dbo.SALES ON dbo.Dissection.DissNo = dbo.SALES.CODE
WHERE (dbo.SALES.BRN = 1) 
GROUP BY dbo.Category.CatNo, dbo.Category.Categaory
ORDER BY dbo.Category.CatNo

我收到以下错误消息,

Msg 8120, Level 16, State 1, Line 2 Column 'dbo.Category.CatNo' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

请问有什么帮助吗?

最佳答案

我找不到在您的查询中生成该错误的原因。您可以使用 CASE 语句来简单地进行这些子查询

SELECT dbo.category.catno     AS Category, 
       dbo.category.categaory AS NAME, 
       Sum(CASE WHEN dbo.sales.date BETWEEN '2016-07-17' AND '2016-07-23' THEN dbo.sales.sellinc END) AS ActualSales, 
       Sum(CASE WHEN dbo.sales.date BETWEEN '2015-07-19' AND '2015-07-25' THEN dbo.sales.sellinc END) AS LastYrVariance, 
       Sum(CASE WHEN dbo.sales.date BETWEEN '2016-01-01' AND '2016-09-05' THEN dbo.sales.sellinc END) AS YrToDateActual, 
       Sum(CASE WHEN dbo.sales.date BETWEEN '2015-01-01' AND '2015-09-05' THEN dbo.sales.sellinc END) AS LastYrToDateActual 
FROM   dbo.category 
       INNER JOIN dbo.dissection 
               ON dbo.category.catno = dbo.dissection.catno 
       INNER JOIN dbo.division 
               ON dbo.dissection.divno = dbo.division.id 
       INNER JOIN dbo.departments 
               ON dbo.dissection.deptno = dbo.departments.deptid 
       INNER JOIN dbo.sales 
               ON dbo.dissection.dissno = dbo.sales.code 
WHERE  ( dbo.sales.brn = 1 ) 
GROUP  BY dbo.category.catno, 
          dbo.category.categaory 
ORDER  BY dbo.category.catno 

关于sql - 使用 where 和 groupby 进行子选择 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39333811/

相关文章:

sql - 获取列值变化的时间戳

sql-server - Perl -- 查询获取 Not Hash Reference 时的 DBI selectall_arrayref

SQL查询: find all devices that have ALL of the Ids passed in

mysql - JOIN 在 MySQL 中如何工作?

sql - 为什么 object_id 总是返回 null?

SQL - 在脚本中处理 IS NULL

sql - MS SQL Server 在空格上分割单词,但仅当不在双引号中时

mysql - 跟踪访问与动态目标的数据库

sql - 生成唯一名称的性能问题

JPA NativeQuery 中的 MYSQL 嵌套查询