连接SQL Server表

连接SQL Server表,sql,sql-server,tsql,Sql,Sql Server,Tsql,电影 电影ID 标题 价值观: 1.“黑社会进化” 2.‘被拿走了’ 类别 类别 姓名 价值观: 1.“行动” 2.“恐怖” 3.“戏剧” 4.‘悬念’ 关联表: 电影分类 电影ID 电影分类 价值观: 电影分类 11 12 21 二十四 有没有一种方法可以通过连接这三个表来生成这样的输出: 电影标题分类 1地下世界进化行动,恐怖 悬念 (select a.Store, a.Id, a.Title, a.Publisher, a.Serial

电影

电影ID
  • 标题
  • 价值观:

    • 1.“黑社会进化”
    • 2.‘被拿走了’
    类别

  • 类别
  • 姓名
  • 价值观:

    • 1.“行动”
    • 2.“恐怖”
    • 3.“戏剧”
    • 4.‘悬念’
    关联表:

    电影分类

    • 电影ID
    • 电影分类
    价值观:

    电影分类

    11
    12
    21
    二十四

    有没有一种方法可以通过连接这三个表来生成这样的输出:

    电影标题分类
    1地下世界进化行动,恐怖
    悬念

    (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语句,但我不知道这是否是唯一的方法,因为我认为它看起来不太好。希望有人能帮助我。谢谢

    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]
    

    我想你需要一个光标来完成这个伟大的任务,谢谢你的SQL小提琴。我的“今天学到了新东西”:-)