如何根据条件聚合行中的值并在sql中获取输出?

问题描述 投票:0回答:1

我的表包含几行,必须进行聚合。例如:当日期,地点和燃料相同时,列是sites, fuel, sales, date我需要聚合这些行的销售列并且有一行。(删除其他行或不选择那些行,因为值是聚合的)

我怎样才能在sql的select查询中做到这一点?

例如

site, fuel, sale,date
siteA, Diesel, 100, 2019-01-01
SiteA, Diesel,  300, 2019-01-01
siteB ,Ulp, 200, 2019-01-01
siteC,E10, 500, 2019-01-01

输出必须是;

site, fuel, sale,date
siteA, Diesel, 400, 2019-01-01
siteB ,Ulp, 200, 2019-01-01
siteC,E10, 500, 2019-01-01

我的sql就像;

 select 
        [CompanyCode] as 'Company Code',
        [Sitecode] as 'Site Code',
        [ProductCode] as 'Product Name',
        CONVERT(date, [InvDay]) as  Date,

         SUM (CASE
                    WHEN [Sales] ='NULL' THEN 0
                     WHEN [Sales] = '' then 0
                    ELSE
                     CONVERT(decimal(10,4) ,[Sales] )
                     END) as 'Sale Volume'

    FROM [dbo].[2018-01] 

     group by Companycode,Sitecode,ProductCode,date,Sales
sql sql-server
1个回答
2
投票

使用group bysum()聚合

select  site, fuel, date, sum(case when sales is null or sales='' then 0 else cast(sales as decimal(10,4)) end) as sale
from tablename
group by site, fuel, date

根据您的回答 - 您必须从分组中删除销售列

select 
        [CompanyCode] as 'Company Code',
        [Sitecode] as 'Site Code',
        [ProductCode] as 'Product Name',
        CONVERT(date, [InvDay]) as  Date,

         SUM (CASE
                    WHEN [Sales] is null or
                     [Sales] = '' then 0
                    ELSE
                     CONVERT(decimal(10,4) ,[Sales] )
                     END) as 'Sale Volume'

    FROM [NEO_DB].[dbo].[Caltex-migration-2018-01] 

     group by Companycode,Sitecode,ProductCode,CONVERT(date, [InvDay]) 
© www.soinside.com 2019 - 2024. All rights reserved.