2010-10-02 19 views
0

我試圖將多行值連接成單行...我已經實現了非常接近但意識到下面的查詢錯過了第一行每次...我錯過了一些明顯的東西這裏?我之前從未使用CTE,因此我努力去理解它背後的概念。提前致謝。CTE連接缺少組迭代中的第一行

WITH CTE (AnswerResponseRefId, QuestionComponentList, QuestionComponentName, 
    templevel) 
     AS ( 
      SELECT 
      tao1.AnswerResponseRefId, 
      CAST('' AS VARCHAR(MAX)) AS QuestionComponentList, 
      CAST('' AS VARCHAR(69)) AS QuestionComponentName, 
      0 AS templevel 
      FROM 
      TargetAnswersOrdered tao1 
      WHERE tao1.QuestionRefId = 'B6944310-96FA-401C-86FE-A7BEA1D7B2B0' 
      and tao1.TargetRefId = '5E013FC7-5AC9-45E4-A4D7-000F3C241599' 
      GROUP BY tao1.AnswerResponseRefId 

     UNION ALL 

      SELECT   
       qc.AnswerResponseRefId, 
       CAST(c.QuestionComponentList + 
       CAST(c.QuestionComponentName AS VARCHAR(64)) AS VARCHAR(MAX)), 
       CAST(qc.QuestionComponentRefId AS VARCHAR(64)) + '*V' + 
       CAST(qc.QuestionComponentVersion AS VARCHAR(2)) + '*', 
       templevel + 1 
      FROM CTE c 

      INNER JOIN 

      TargetAnswersOrdered qc 
      ON 
       c.AnswerResponseRefId = qc.AnswerResponseRefId 
      WHERE 
       CAST(qc.QuestionComponentRefId AS VARCHAR(64)) + '*V' + 
       CAST(qc.QuestionComponentVersion AS VARCHAR(2)) + '*' 
        > c.QuestionComponentName 
     ) 

SELECT 
    AnswerResponseRefId, 
    QuestionComponentList 
FROM (SELECT 
      AnswerResponseRefId, 
      QuestionComponentList, 
      RANK() OVER (PARTITION BY 
          AnswerResponseRefId 
          ORDER BY templevel DESC)FROM CTE) 
D (AnswerResponseRefId, QuestionComponentList, rank) 
    WHERE rank = 1 ; 

回答

0

解決..

使用錯誤裁判在

CAST(c.QuestionComponentList + CAST(qc.QuestionComponentRefId AS VARCHAR(64))+ 'V' + CAST(qc.QuestionComponentVersion AS VARCHAR(2))+''AS VARCHAR(MAX))AS QuestionComponentList,