SQL Server group by absorb null and empty values

sql group by ignore null
sql group by include null
sql group by null and not null
group by exclude null
group by null values sql server
sql rollup replace null
how to handle null values in aggregate functions
oracle group by ignore null

I have this data:

Id  Name     amount    Comments 
-------------------------------
1     n1     421762    Hello    
2     n2        421    Bye      
3     n2        262    null     
4     n2       5127    ''  

Each name may or may not have extra rows with null or empty comments.

How can I group by name and sum(amount) such that it ignores/absorbs the null or empty comments in the grouping and shows me only 2 groups.

Output I want:

Id   Name     sum(amount)   Comments 
------------------------------------
1     n1         421762     Hello    
2     n2           5180     Bye 

I can't figure this out.

I hoped that would ignore the null/empty values but I always end up with 4 groups

select id, name, sum(amount), comments 
from table 
group by id, name, comments

You can't have a field in the SELECT statement unless it's part of the GROUP BY clause or used for aggregation. The question and desired output shows that the rows should be grouped by name, which means all other fields (ID,amount, comments) should be aggregated.

The question doesn't specify how the IDs should be aggregated, or which comments should appear. Aggregating strings is only possible using functions like MIN/MAX in all SQL Server versions up to 2016. SQL Server 2017 added STRING_AGG to concatenate strings. In earlier versions people have to use one of many string aggregation techniques that may involve XML or SQLCLR functions.

In SQL Server versions the desired output can be produced by

SELECT MIN(ID) as ID,name,sum(amount) as Amount, max(comment) as comments
from #table1 
group by name

This produces the desired output :

ID  name    Amount  comments
1   n1      421762  Hello
2   n2      5810    Bye

This assumes that there is only one non-empty comment. The question doesn't specify something different though.

In SQL Server 2017 multiple comments can be concatenated with STRING_AGG :

SELECT MIN(ID) as ID,name,sum(amount) as Amount, STRING_AGG(comment,' ') as comments
from table1 
group by name

Given the question's data, this will also produce the desired output.

ID  name    Amount  comments
1   n1      421762  Hello
2   n2      5810    Bye

SQL Server group by absorb null and empty values - sql-server, How can I group by name and sum(amount) such that it ignores/absorbs the null or empty comments in the grouping and shows me only 2 groups. Output I want:� SQL Server group by absorb null and empty values. Ask Question Asked 10 months ago. You can use STRING_AGG in SQL Server 2017 to aggregate (concatenate)

Just use MAX() with comments:

select id, name, sum(amount), MAX(comments) 
from table 
group by id, name;

NULL Values and the GROUP BY Clause, We've already covered how to use the GROUP BY clause but how does SQL's a simple SQL query with both the GROUP BY clause and NULL values: This empty space represents all the NULL values returned by the� Let’s pull out the NULL values using the IS NULL operator. select * from vendor where vendor_email is null . Next, I want to pull out the empty string using the tick-tick, or empty string. select * from vendor where vendor_email = '' If you want to combine them to search for the SQL null or empty string together and retrieve all of the empty

Select Top 1 with Ties
       ID 
      ,Name
      ,Amount = sum(Amount) over (Partition By Name)
      ,Comments = max(Comments) over (Partition By Name)
from YourTable
Order by Row_Number() over (Partition By Name Order by ID)

Returns

ID  Name    Amount  Comments
1   n1      421762  Hello
2   n2      5810    Bye

Some Tricky Situations When Working with SQL Server NULLs, Learn how to debug NULLs in SQL Server when used in NOT IN clauses, with aggregate functions, assigning variables, GROUP BY clauses NULL does not mean 0 or an empty string, it means that the value is unknown. GROUP BY d.DeptId,d.DeptName,g.GradeId,g.GradeName Deja View - The strange feeling that somewhere, sometime you've optimised this query before How to get the best help on a forum

use row_number()

  select id,name,comments,amount from 
     (select id,name,
     row_number() over(partition by Name  order by  case when Comments is not null then 1 else 2 end) rn,
       sum(amount) over(partition by Name) as amount,comments
   from table_name
      ) a where a.rn=1

GROUP BY (Transact-SQL), A SELECT statement clause that divides the query result into groups of rows, Specifies the empty group which generates the grand total. If a grouping column contains NULL values, all NULL values are considered equal� NULL and blank are two different values. There is no setting in SQL that will change the default. You can change the source that feeds the SQL tables to load '' instead of NULL, do either ISNULL, REPLACE or CASE or postprocess your csv. A quick script can replace the NULL values with blanks.

PostgreSQL 8.4 Official Documentation, Postgresql Global Development Group The Postgresql Global Development Group. result_is_int to 1 causes libpq to byte-swap the value if necessary, so that it is null arguments, null results, nor set-valued results when using this interface . from the server; it just returns messages previously absorbed by another libpq � CREATE TABLE [dbo].[Calendar]( [dt] [date] NOT NULL, CONSTRAINT [PK_Calendar] PRIMARY KEY CLUSTERED ( [dt] ASC )) DISTINCT doesn't do anything in your SELECT, so I removed it. To group by date I cast the DT_Arriving to date type, rather than varchar. I assume DT_Arriving is not of date type. If it is, then cast is not needed.

Nulls hacks, Introducing the first version of the private server Nulls Bravo Stars for which something about the common gotchas when using NULL in T-SQL, and why isNull()) : Returns rows where values in a provided column are null. Join an epic group of dragon legends in a world brimming with enchantment! Count Null values in all columns in a table and group it by a column – Learn more on the SQLServerCentral forums SQL Server Newbies; Count Null values in all columns in a table and group it

Spark Trim Whitespace Scala, SQL statements can be run by using the sql methods provided by Spark val different ways to replace null values with an empty string, constant value and zero(0) a standard measurement for a material's acoustical absorption ranging from 0. GROUP BY city") SQL or Dataset API's operators go through the same query� How to Delete Millions of Rows using T-SQL with Reduced Impact; T-SQL – How to Select Top N Rows for Each Group Using ROW_NUMBER() New T-SQL features in SQL Server 2012 – OFFSET and FETCH; How to Kill All MySQL Processes For a Specific User; Using exec sp_who2 to help with SQL Server troubleshooting; How to move tempdb

Comments
  • You're grouping by comments too. If you don't want that, don't add comments in the group by clause
  • just add a having clause after the group by
  • i want to show comments in the final select statement
  • Is there a reason you aren't just eliminating them? where comments is not null and comments <> ''
  • @heyNow which comments? All of them? Some of them? You can use STRING_AGG in SQL Server 2017 to aggregate (concatenate) strings just as you would use eg SUM() on a numeric field. Or you can use MIN/MAX to return the first/last comment
  • This doesn't produce the desired output. The amount should be summed