2014-01-11 55 views
0

我很抱歉發佈這個,我覺得,幾乎是重複的。但我已經嘗試了我找到的解決方案,但沒有得到它在我的解決方案中工作:(在這種情況下,我如何將行加入動態列?

這是SQL在我FUBARed之前的樣子,它返回的數據格式很好。我得到同樣的數據重複的行不同的是,問題和答案都改變了。我想,這個問題將是列名和它的值的答案。

SELECT c.*, sa.Question, sa.Answer 
    FROM Customers as c, Surveys s, SurveyAnswers sa 
    WHERE c.OrderID IN(SELECT id FROM @orders) 
     AND s.CustomerID = c.id 
     AND sa.SurveyID = s.ID 

我的SQL薄弱,我得到儘快完成這個工作:(替代方案是在.net應用程序中執行更繁重的工作,但我很樂意直接獲取數據 此致敬意, Mikael

+0

你可能尋找類似這樣的東西嗎? http://stackoverflow.com/questions/11985796/sql-server-pivot-dynamic-columns-no-aggregation – StuartLC

回答

0

您想使用Bluefeet's answer here來完成動態列轉軸。 (我忽略你的@orders過濾器簡潔):

DECLARE 
    @cols AS NVARCHAR(MAX), 
    @query AS NVARCHAR(MAX) 

SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(sa.Question) 
      FROM SurveyAnswers sa 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 

set @query = 'SELECT CustomerID, Name, ' + @cols + ' from 
      (
       select 
        c.ID as CustomerId, 
        c.Name, 
        sa.Question, 
        sa.Answer 
       FROM Customers as c 
        INNER JOIN Surveys s ON s.CustomerID = c.id 
        INNER JOIN SurveyAnswers sa ON sa.SurveyID = s.ID 
      ) x 
      pivot 
      (
       min(Answer) 
       for Question in (' + @cols + ') 
      ) p ' 
execute(@query); 

SqlFiddle here