2014-09-10 3 views
0

문제를 해결하는 데 가까워졌지만이 문제를 해결할 수는 없습니다. 나는 포럼을 검색했고 내가 찾고있는 것에 가까이 다가 가는데 도움이 된 몇 가지 출처를 보았습니다. 그러나 이제는 붙어 있습니다 :SQL Server 2008 : 피벗 쿼리

이것은 3 개의 테이블에서 정보를 가져 오는 데 사용한 원래의 SQL입니다 :

nAtoZID sName  Rating     Price 
3040  Rest 1 3 Stars - Excellent $$ - $30 to $40 
3222  Rest 2 Null     $ - $20 to $30 
6996  Rest 3 Null     $$ - $30 to $40 
4474  Rest 4 Null     $$$ - $40 to $50 
3385  Rest 5 Null     $ - $20 to $30 
8244  Rest 6 Null     $ - $20 to $30 
107  Rest 7 Null     ¢¢ - Under $10 
2661  Rest 8 3 Stars - Excellent $$$ - $40 to $50 
:

nAtoZID sName  Rating     Price 
3040  Rest 1 $$ - $30 to $40  $$ - $30 to $40 
3040  Rest 1 3 Stars - Excellent 3 Stars - Excellent 
3222  Rest 2 $ - $20 to $30  $ - $20 to $30 
6996  Rest 3 $$ - $30 to $40  $$ - $30 to $40 
4474  Rest 4 $$$ - $40 to $50  $$$ - $40 to $50 
3385  Rest 5 $ - $20 to $30  $ - $20 to $30 
8244  Rest 6 $ - $20 to $30  $ - $20 to $30 
107  Rest 7 ¢¢ - Under $10   ¢¢ - Under $10 
2661  Rest 8 $$$ - $40 to $50  $$$ - $40 to $50 
2661  Rest 8 3 Stars - Excellent 3 Stars - Excellent 

원하는 결과가 이것이다 : 나에게 다음과 같은 결과를 얻을 수

SELECT tblAtoZ.nAtoZID, tblAtoZ.sName, tblAnsPickList.sListText Rating, tblAnsPickList.sListText Price 
    FROM tblAtoZ 
    INNER JOIN 
    tblAnswers ON tblAtoZ.nAtoZID = tblAnswers.nID 
    INNER JOIN 
    tblAnsPickList ON tblAnswers.sAnswer = CAST(tblAnsPickList.nListIndex AS varchar) 
    AND tblAnswers.nQuestionID = tblAnsPickList.nQuestionID 
    WHERE  
    tblAnswers.nQuestionID IN ('182','205') AND sCategory = 'Restaurant' 
    ORDER BY sName  

0

다른 조인, 피벗 쿼리 및 심지어 이전 SQL Server 2000 메서드를 시도하고이 권리를 얻을 수 없습니다. 어떤 방향이나 도움을 주셔서 감사합니다. 감사

답변

0

을 시도 같은

SELECT tblAtoZ.nAtoZID, 
      tblAtoZ.sName, 
      pivotTable.Rating, 
      pivotTable.Price 
     FROM tblAtoZ 
     INNER JOIN 
     (
      select nId, 
      nListIndex, 
      [182] as Rating, 
      [205] as Price 
      from 
      (
       select nID, nListIndex, sListText, 
         tblAnsPickList.nQuestionID 
       from tblAnsPickList 
       inner join tblAnswers ON 
       sAnswer = CAST(tblAnsPickList.nListIndex AS varchar) 
       and tblAnsPickList.nQuestionID IN ('182','205') 
       and tblAnsPickList.nQuestionID = tblAnswers.nQuestionID 
      ) sourceTable 
      PIVOT (
        max(sListText) 
        for nQuestionID IN ([182],[205]) 
      ) as P 

     ) pivotTable 

     ON tblAtoZ.nAtoZID = pivotTable.nID 
아래
0

당신이 할 수있는, 피벗은이

SELECT 
     tblAtoZ.nAtoZID 
    , tblAtoZ.sName 
    , MAX(CASE 
      WHEN tblAnsPickList.sListText = '3 Stars - Excellent' 
      THEN tblAnsPickList.sListText END)      AS Rating 
    , MAX(CASE 
      WHEN tblAnsPickList.sListText <> '3 Stars - Excellent' 
      THEN tblAnsPickList.sListText END)      AS Price 
FROM tblAtoZ 
     INNER JOIN tblAnswers 
        ON tblAtoZ.nAtoZID = tblAnswers.nID 
     INNER JOIN tblAnsPickList 
        ON tblAnswers.sAnswer = CAST(tblAnsPickList.nListIndex AS varchar) 
         AND tblAnswers.nQuestionID = tblAnsPickList.nQuestionID 
WHERE tblAnswers.nQuestionID IN ('182', '205') 
     AND sCategory = 'Restaurant' 
GROUP BY 
     tblAtoZ.nAtoZID 
    , tblAtoZ.sName 
ORDER BY 
     sName