sql >> Databáze >  >> RDS >> Sqlserver

Jak seskupit řádky se stejnou hodnotou v sql?

Zkuste toto

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

To dává následující výstup

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 seskupuje data s daným názvem sloupce a v této skupině je vygenerováno číslo řádku na základě order by .

Zde je SQL Fiddle

Vytvořil jsem další housle na základě poskytnutého schématu .fiddle2



  1. Jak mohu vybrat posledních 5 řádků v tabulce bez řazení?

  2. Hodnoty vazby PDO pro příkaz MySQL IN

  3. Co je špatného na tomto kódu AS3 pro komunikaci se souborem PHP?

  4. Připojení různých uživatelů systému Windows v SQL Server Management Studio (2005 nebo novější)