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. SQL Server(T-SQL)のパーティションのスイッチイン

    2. PHPでオブジェクトを文字列に変換する

    3. 更新された行を取得

    4. doctrine2:データを失うことなく1対多から多対多に変換する方法