代码之家  ›  专栏  ›  技术社区  ›  Ratha

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

  •  0
  • Ratha  · 技术社区  · 6 年前

    我的表包含很少的行,必须进行聚合。 例如:柱子是 sites, fuel, sales, date 当date、sites和fuel相同时,我需要为这些行聚合sales列,并有一行(删除其他行或不选择这些行,因为值是聚合的)

    如何在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
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Fahmi    6 年前

    group by sum() 聚合

    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
    

    根据你的回答-你必须从分组中删除sales列

    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])