2017-06-14 5 views
0

Ich schreibe die folgende SQL-Abfrage, um den doppelten Platz zu ersetzen. Aber es gibt Fehler. Kann jemand helfen?SQL Replace Funktion funktioniert nicht

Hier ist der Code: -

Select * 
From (
    select nvcFormName,iEvalID,iFormID,dtCreationTime,dtEvaluatedStartTime, 
     fltGradScore,nvcFormattedName,iEvaluatorUserID, 
     iAgentUserID,flScore,iQuestionID,nvcQuestionAnswer 
    from dbo.vwEvaluationQuestions 
    inner join dbo.vwUser on iUserId = iAgentUserID where iFormID = 160 
) as s 
Pivot (min(nvcQuestionAnswer) for iQuestionID in ([23732], replace([23742],' ','')) as pvt 
where dtEvaluatedStartTime > '2017-04-01' and dtEvaluatedStartTime < '2017-04-30' 
order by dtEvaluatedStartTime asc 
+7

was ist der Fehler? – Moudiz

+2

Ich denke, ersetzen ([23742], '', '') ist ein Teil Ihres Problems. Sie versuchen, ein doppeltes Leerzeichen in der Zeichenfolge [23742] zu ersetzen, die keine Leerzeichen enthält. Ich denke, dass Sie diesen hartcodierten Wert durch die Spalte ersetzen müssen, die Sie in Leerzeichen ersetzen möchten ... –

+1

@Neil Hibbert Ich denke, [23742] ist sein Spaltenname – Nithin

Antwort

0

Ersetzen-Funktion für Zeichenfolge Ersatz verwendet wird. Benutze das stattdessen. Apostrophe tun

REPLACE ('[23742]', '', '')

SELECT * 
FROM (
    SELECT nvcFormName 
     ,iEvalID 
     ,iFormID 
     ,dtCreationTime 
     ,dtEvaluatedStartTime 
     ,fltGradScore 
     ,nvcFormattedName 
     ,iEvaluatorUserID 
     ,iAgentUserID 
     ,flScore 
     ,iQuestionID 
     ,nvcQuestionAnswer 
    FROM dbo.vwEvaluationQuestions 
    INNER JOIN dbo.vwUser 
     ON iUserId = iAgentUserID 
    WHERE iFormID = 160 
    ) AS s 
Pivot(min(nvcQuestionAnswer) FOR iQuestionID IN (
      [23732] 
      ,replace('[23742]', ' ', '') 
      ) AS pvt WHERE dtEvaluatedStartTime > '2017-04-01' 
     AND dtEvaluatedStartTime < '2017-04-30' ORDER BY dtEvaluatedStartTime)