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

SQL CONCAT IF ステートメント?

    SELECT  agenda.AgendaItemNumber,
            Agenda.AgendaName, 
            AgendaType.AgendaTypeDescription, 
            STUFF(( SELECT  ';' + FullName 
                    FROM    UserDetails
                    WHERE   UserDetails.AgendaID = Agenda.AgendaID
                    FOR XML PATH('')
                ), 1, 1, '') AS fullName 
    FROM    Agenda
            INNER JOIN AgendaType 
                ON AgendaType.AgendaTypeID=Agenda.AgendaTypeID
            INNER JOIN UserDetails 
                ON Agenda.AgendaID = Userdetails.AgendaID
    WHERE   agenda.AgendaTypeID = '2'
    AND     AgendaItemNumber = AgendaItemNumber
    AND     AgendaName = AgendaName
    AND     AgendaTypeDescription = AgendaTypeDescription
    AND     AgendaItemNumber >= '3'
    

    補遺

    SQL-Server の XML 拡張により、複数の行を 1 つの行に連結できます。拡張機能の実際の目的は、(明らかに) XML として出力できるようにすることですが、拡張機能の副産物である気の利いたトリックがいくつかあります。上記のクエリでは、サブクエリ (FullName) に列名がある場合、Joe Bloggs1Joe Bloggs2 として出力されます。 、列名がないため、単に行を連結します (適切な XML を形成しません)。 パス たとえば、上記で PATH('Name') を使用すると、 ;Joe Bloggs;Joe Bloggs2<となります。 /コード> パスを列名と組み合わせると、Joe Bloggs になります。

    最後に STUFF リストの先頭にあるセミコロンを削除するだけです。




    1. MySQLのパフォーマンス:JOIN ON vs WHERE

    2. PDOでトリガーを作成できないのはなぜですか?

    3. PHP-致命的なエラー:メンバー関数bind_param()の呼び出し

    4. JPAを使用したSpringのカスタムクエリ