sql >> データベース >  >> RDS >> Sqlserver

SQL の次のレコードと前のレコードに基づく複雑な並べ替え

    私があなたの要件を正しく理解していれば、 parentId のいくつかの部分があります 各部分を letter で開始する必要があります s それらは前の部分にあります letter で終わります それらは次のパートにあります。はいの場合は、これを試してください:

    ;WITH t AS (
        SELECT 
            c.id, 
            c.parentId,
            c.letter,
            dt.parentSeq
        FROM 
            Child c 
            JOIN (
            SELECT 
                ci.parentId, ROW_NUMBER() OVER (ORDER BY p.number) parentSeq
            FROM 
                Child ci
                JOIN
                Parent p ON ci.parentId = p.id
            GROUP BY
                ci.parentId, p.number) dt ON c.parentId = dt.parentId
    )
    SELECT
        p.number,
        t.letter
    FROM 
        t
        JOIN
        Parent p ON t.parentId = p.id
    ORDER BY
        p.number,
        CASE WHEN t.letter IN (SELECT ti.letter FROM t ti WHERE ti.parentSeq = t.parentSeq - 1) THEN 0 
            WHEN t.letter IN (SELECT ti.letter FROM t ti WHERE ti.parentSeq = t.parentSeq + 1) THEN 2 
            ELSE 1 END,
        t.letter
    


    1. MYSQL-複数のクエリから単一のSQLクエリを作成します

    2. MySQLで過去10分間のレコードを取得する方法

    3. Postgresダンプを生成して別のサーバーに保存する

    4. MySQLでユーザーと認証を管理する方法