1

映画

  • MovieID
  • タイトル
  • 値付き:

    • 1、「アンダーワールドエボリューション」
    • 2、「取られた」

    カテゴリー

  • CategoryId
  • 名前
  • 値付き:

    • 1、「アクション」
    • 2、「ホラー」
    • 3、「ドラマ」
    • 4、「サスペンス」

    関連付けテーブル:

    MovieCategory

    • MovieId
    • MovieCategoryId

    値付き:

    MovieId     CategoryId

        1 1
        1 2
        2 1
        2 4

    これらの3つのテーブルを結合することにより、このような出力を作成できる方法はありますか?

    MovieId    タイトル                                カテゴリ
    1アンダーワールドエボリューションアクション、ホラー
    2実行アクション、サスペンス

    (select
    
        a.Store,
        a.Id,
        a.Title,
        a.Publisher,
        a.SerialNo,
        max(a.cat1) + max(a.cat2) + max(a.cat3) + max(a.cat4) + max(a.cat5) Genre,
        a.Rate,
        a.ReleaseDate,
        a.MovieStatus
    
        from
    
            (select 
    
            m.Id,
            m.Title,
            p.Name Publisher,
    
            case 
                when mc.Description like 'Action' then mc.Description + ', ' else '' end cat1,
            case 
                when mc.Description like 'Comedy' then mc.Description + ', ' else '' end cat2,
            case 
                when mc.Description like 'Drama' then mc.Description + ', ' else '' end cat3,
            case 
                when mc.Description like 'Horror' then mc.Description + ', ' else '' end cat4,
            case 
                when mc.Description like 'Suspense' then mc.Description + ', ' else '' end cat5,
    
            mis.SerialNo,
            mr.Description Rate,
            m.ReleaseDate,
            ms.Description MovieStatus,
            s.Name Store
    
            from MovieCategoryMovie mcm
    
            inner join Movie m
            on mcm.MovieId like m.Id
    
            inner join MovieCategory mc
            on mc.Id like mcm.MovieCategoryId
    
            inner join Publisher p
            on m.PublisherId like p.Id
    
            inner join MovieRate mr
            on m.MovieRateId like mr.Id
    
            inner join MovieInStore mis
            on mis.MovieId like m.Id
    
            inner join Store s
            on mis.StoreId like s.Id
    
            inner join MovieStatus ms
            on ms.Id like mis.MovieStatusId
    
            where s.Name like @store
    
            group by
    
            m.Id,
            m.Title,
            mcm.MovieId,
            mcm.MovieCategoryId,
            p.Name,
            mr.Description,
            m.ReleaseDate,
            mc.Description,
            ms.Description,
            s.Name,
            mis.SerialNo
    
            ) as a
    

    このコードは、私が話しているこの出力を実行するストアドプロシージャからのものです。

    私はすでにcaseステートメントを使用してこれを試しましたが、それがそれを行う唯一の方法であるかどうかはわかりません。誰かが私を助けてくれることを願っています。ありがとう!

    4

    1 に答える 1

    2
    SELECT
         [MovieID], [Title],
         STUFF(
             (SELECT ', ' + b.[Title]
              FROM MovieCategory a
                   INNER JOIN Category b
                      On a.CategoryID = b.MovieID
              WHERE  a.[MovieID] = d.[MovieID]
              FOR XML PATH ('')) 
              , 1, 1, '')  AS CategoryList
    FROM Movie AS d
    GROUP BY [MovieID], [Title]
    
    于 2013-01-28T08:27:12.227 に答える