在SQL Server 2008中使用条件聚合

KC

我有太多选择语句的查询。因此,我使用了条件聚合该查询引用了SQL Server 2008中Instock表中的数据,最终查询如下所示:

select 
    SUM(CASE WHEN MONTH = '2013-8-1' THEN CurrentStock ELSE 0 END) as CurrentStock,
    Isnull(Sum(CASE WHEN MONTH = '2014-2-1' THEN CPU ELSE 0 END), 0) - Isnull(Sum(CASE WHEN MONTH = '2013-8-1' THEN CPU ELSE 0 END), 0) as CPU,
    SUM(CASE WHEN Month = '2013-8-1' THEN NonCPUWIP ELSE 0 END) as NonCPU,
    Isnull(Sum(CASE WHEN MONTH = '2014-2-1' THEN ScrapDiscarded ELSE 0 END), 0) - Isnull(Sum(CASE WHEN MONTH = '2013-8-1' THEN ScrapDiscarded ELSE 0 END), 0) as Scrap,
    SUM(CASE WHEN Month = '2013-8-1' THEN WaitingForApproval ELSE 0 END) as WFA  
from 
    Instock
where 
    Vendor = 'abc'

问题是需要包括的最后一个查询。它从OutStock表中获取数据,但我想在上一个查询中包含该查询,以便它以单行的形式返回结果。我无法使用嵌套查询来满足要求,但是我希望使用条件聚合获得相同的结果以提高数据库性能。

需要包括的查询是:

select 
    COUNT(Product) as Despatched 
from 
    OutStock 
where 
    DispatchDate between '2013-8-1' and '2014-2-1' 
    and Vendor = 'abc'`


所以结合两者,我想作为一个查询执行,它将返回一行

普雷迪普

只需将第二个查询添加到第一个查询的列列表中,因为它将仅返回一行。试试这个。

SELECT Sum(CASE
             WHEN MONTH = '2013-8-1' THEN CurrentStock
             ELSE 0
           END)                                 AS CurrentStock,
       Isnull(Sum(CASE WHEN MONTH = '2014-2-1' THEN CPU ELSE 0 END), 0) - 
       Isnull(Sum(CASE WHEN MONTH = '2013-8-1' THEN CPU ELSE 0 END), 0) AS CPU,
       Sum(CASE WHEN Month = '2013-8-1' THEN NonCPUWIP ELSE 0 END) AS NonCPU,
       Isnull(Sum(CASE WHEN MONTH = '2014-2-1' THEN ScrapDiscarded ELSE 0 END), 0) - 
       Isnull(Sum(CASE WHEN MONTH = '2013-8-1' THEN ScrapDiscarded ELSE 0 END), 0)AS Scrap,
       Sum(CASE WHEN Month = '2013-8-1' THEN WaitingForApproval ELSE 0 END) AS WFA,
       (SELECT Count(STBSerialNUMBER)
        FROM   OutStock
        WHERE  DispatchDate BETWEEN '2013-8-1' AND '2014-2-1'
                AND Vendor = 'abc' ) as Despatched
FROM   Instock I
WHERE  Vendor = 'abc'

更新 :

如果您希望每个模型的结果计数,则将其转换subquerycorrelated subquery应该是这样的

  (SELECT Count(STBSerialNUMBER)
   FROM   OutStock O
   WHERE o.model = i.model  -- here is the change
   AND O.DispatchDate BETWEEN '2013-8-1' AND '2014-2-1'
   AND o.Vendor = 'abc')

这里每一个modelInstock表中的相应countoutstock将caluclated。

或者您也可以使用Left Join首先计算出每个的计数modelOutstock表中join的结果返回给Instock使用模型表

   ....
   From Instock I Left Join 
   (SELECT Count(STBSerialNUMBER) OutStock_count,Model
   FROM   OutStock O
   WHERE  O.DispatchDate BETWEEN '2013-8-1' AND '2014-2-1'
   AND o.Vendor = 'abc'
   Group by Model) O on o.model = i.model

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

SQL Server:条件聚合;

在SQL Server 2008中的PIVOT查询中使用ISNULL

如何在SQL SERVER 2008中使用滞后功能

如何在SQL Server 2008中使用表别名编写UPDATE SQL?

在SQL Server 2008中使用表变量执行动态SQL查询时出错

SQL Server 中基于列值的条件聚合

在 SQL Server 中的聚合函数之后过滤条件?

显示按SQL Server中的聚合条件筛选的月份

如何使用WHILE LOOP向条件列表中添加值,SQL Server 2008

在没有聚合功能的SQL Server中使用PIVOT

在枢轴聚合函数中使用CONCAT函数的SQL Server错误

在SQL Server中使用JSON连接/聚合字符串

在SQL Server 2008中的公用表表达式中使用分组依据

在SQL Server 2008中使用sp_send_dbmail仅传递了几封邮件

在SQL Server 2008中使用xmlnamespaces读取具有命名空间的XML文件

在SQL Server 2008中使用分组依据和排序依据检索结果时出错

如何在SQL Server 2008中使用Alter Table语句设置默认值

在SQL Server 2008 R2中使用PIVOT时获取空数据

如何在SQL Server 2008 R2中使用小数或数字内的列

SQL Server 2014 中的聚合

无法在SQL Server 2008 R2中设置条件

使用JSP和SQL Server 2008实施搜索条件?

在 SQL Server 2008 中使用 case 语句减去 2 行

在SQL Server 2008中订购

SQL Server 2008中的SQL FIFO逻辑

如何从查询输出中的SELECT行中隐藏MIN(日期)“聚合” ... SQL Server 2008

在SQL Server中使用GROUP BY中的Quarter

在Django 2.0中使用Sql Server

使用聚合分组以获取 SQL Server 中的记录?