【问题标题】:Joining 3 SQL Querys with Pivot/Unpivot in them加入 3 个带有 Pivot/Unpivot 的 SQL 查询
【发布时间】:2014-04-11 08:12:57
【问题描述】:

我有一个名为 MachineSweepQuestionsMachineSweepAnswersMachineSweetComments 的表,我需要使用我认为是 Pivots 的代码加入所有这 3 个表,如我的代码中所示,以便他们可以通过几个参数。下面是代码图片,带有返回结果的图像和我的最终目标的想法,但是,所有这些表共享列名 AreaIDLastChecked(这些将是传递的参数。

问题查询:

Select AreaID, Questions From (Select AreaID, Question1,
Question2,
Question3,
Question4,
Question5,
Question6,
Question7,
Question8,
Question9,
Question10,
Question11,
Question12,
Question13,
Question14
From MachineSweepQuestions) x
UNPIVOT
(
Questions
For QuestionID in (Question1, Question2, Question3, Question4, Question5, Question6,Question7,Question8,Question9,Question10,Question11,Question12,Question13,Question14)
) unpiv Where AreaID='8'

回答查询:

 Select Answer,LastChecked From (select AreaID,Answer1,
 Answer2,
 Answer3,
 Answer4,
 Answer5,
 Answer6,
 Answer7,
 Answer8,
 Answer9,
 Answer10,
 Answer11,
 Answer12,
 Answer13,
 Answer14,
 LastChecked
 From MachineSweepAnswers) x 
 UNPIVOT
 (
 Answer
 For AnswerID
in(Answer1,Answer2,Answer3,Answer4,Answer5,Answer6,Answer7,Answer8,Answer9,Answer10,Answer11,Answer12,Answer13,Answer14)
 ) unpiv Where AreaID = '8' AND LastChecked = '2014-04-01'

充满希望的最终结果:

所以我的问题是,有没有人知道如何通过我的 cmets 查询加入这些 Pivots 以实现以下结果,因为我已经尝试了多种方法并搜索了答案以希望得到指导,但已经走到了死胡同,欢迎任何帮助。 (我的绘画技巧让德芬奇哭了!)...

编辑!:!我错过了 cmets off ,SQL 查询是 Select CommentsBox,Lastchecked From MachineSweepComments Where AreaID='8' And LastChecked='2014-04-01'

【问题讨论】:

  • 您可以为您的数据构建 SQL Fiddle 吗?
  • 不,我用的是 SQL-Server mate,Fiddle 没用。
  • 你知道什么是 SQL Fiddle 吗?
  • sqlfiddle.com 如果您在那里构建数据,我们可以更快地为您提供帮助
  • 我不知道它是什么。 :/ 但是是的,Mikka 我会的..

标签: sql sql-server pivot unpivot


【解决方案1】:

试试这个:

Select * from (Select AreaID, Questions From (Select AreaID, Question1,
Question2,
Question3,
Question4,
Question5, 
Question6,
Question7, 
Question8, 
Question9, 
Question10,
Question11,
Question12,
Question13,
Question14 From
MachineSweepQuestions) x UNPIVOT ( Questions For QuestionID in
   (Question1,
    Question2, 
    Question3, 
    Question4, 
    Question5,
    Question6,
    Question7,
    Question8,
    Question9,
    Question10,
    Question11,
    Question12,
    Question13,
    Question14)
   ) unpiv Where AreaID=@AreaId) AS tbl1 LEFT OUTER JOIN 
          (Select Answer,
                  LastChecked, AreaId From (select AreaID,
                                           Answer1,
                                           Answer2,
                                           Answer3,
                                           Answer4,
                                           Answer5,
                                           Answer6,
                                           Answer7,
                                           Answer8,
                                           Answer9,
                                           Answer10,
                                           Answer11,
                                           Answer12,
                                           Answer13,
                                           Answer14,
                                           LastChecked
                                                 From MachineSweepAnswers) x 
                                             UNPIVOT
                                                 (
                                                 Answer
                                                 For AnswerID
                                                 in(Answer1,
                                                 Answer2,
                                                 Answer3,
                                                 Answer4,
                                                 Answer5,
                                                 Answer6,
                                                 Answer7,
                                                 Answer8,
                                                 Answer9,
                                                 Answer10,
                                                 Answer11,
                                                 Answer12,
                                                 Answer13,
                                                 Answer14)
                                                 ) unpiv Where AreaID = @AreaId 
                                                 AND LastChecked = '2014-04-01') 
                        AS tbl2 ON tbl1.AreaId=tbl2.AreaId
              LEFT OUTER JOIN (Select CommentsBox,
                                 Lastchecked,
                                 AreaId From MachineSweepComments 
                                             Where AreaID=@AreaId 
                                             OR AreaId IS NULL
                                             And LastChecked='2014-04-01') 
                         AS tbl3 ON tbl1.AreaId=tbl3.AreaId

如果这不起作用,请随时与我交谈

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 2016-02-21
    • 1970-01-01
    • 2016-01-29
    相关资源
    最近更新 更多