I have encountered a strange (until I understand the logical reason) behaviour of group by
in a SQL Server database.
There are many duplicates in a table, for which when I query I get duplicate rows but when I try to find all dupes using group by or row_number
strategy I get 0 records.
But when I add "Cast" to the group by / row_number I get correct list of duplicates.
The datatype is nvarchar
for all 3 keys.
Can someone tell me why this is happening?
Added the query and its output
select top 10 len(VBELN) len_vblen, len(MANDT) , len(posnr) , * from [SRC_SAP_R3].[LIPS] where VBELN = '6316785926'
select cast(MANDT as nvarchar) as "MANDT",cast(VBELN as nvarchar) as "VBELN" , cast(posnr as nvarchar) as "posnr", count(*) from [SRC_SAP_R3].[LIPS]
group by cast(MANDT as nvarchar),cast(VBELN as nvarchar) , cast(posnr as nvarchar)
having count(*)>1;
select cast(MANDT as varchar) as "MANDT",cast(VBELN as varchar) as "VBELN" , cast(posnr as varchar) as "posnr", count(*) from [SRC_SAP_R3].[LIPS]
group by cast(MANDT as varchar),cast(VBELN as varchar) , cast(posnr as varchar)
having count(*)>1;
select MANDT, VBELN ,posnr, count(1) from [SRC_SAP_R3].[LIPS]
group by MANDT, VBELN ,posnr
having count(1)>1;