Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да групираме редове с еднаква стойност в sql?

Опитайте това

DECLARE @temp TABLE(col1 varchar(20),col2 int, col3 varchar(20))
insert into @temp values ('data1', 123 , '12/03/2009'),('data1', 124 , '15/09/2009'),
                        ('data2 ',333  ,'02/09/2010'),('data2 ',323 , '02/11/2010'),
                        ('data2 ',673 , '02/09/2014'),('data2',444 , '05/01/2010')

SELECT 
    (CASE rno WHEN 1 THEN col1 ELSE '' END )AS col1,
    col2,
    col3
FROM
(                   
    SELECT 
        ROW_NUMBER() OVER(PARTITION BY Col1 ORDER BY col2) AS rno,
        col1,col2,col3
    FROM @temp
) As temp

Това дава следния резултат

col1    col2    col3
---------------------------------
data1   123 12/03/2009
        124 15/09/2009
data2   323 02/11/2010
        333 02/09/2010
        444 05/01/2010
        673 02/09/2014

PARTITION BY групира данните с даденото име на колона и в тази група се генерира номер на ред въз основа на order by .

Ето SQL Fiddle

Създадох друга цигулка въз основа на предоставената схема.fiddle2



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MS SQL Server ред GUID колона

  2. Как да върнете броя на редовете в резултат от заявка в SQL Server

  3. Нивото на вмъкване на тригера е надвишено?

  4. Как да четете и анализирате планове за изпълнение на SQL Server

  5. Повторете редовете N пъти според стойността на колоната