0

私は、動的SQL文で使用されるクエリを持っています。この場合、選択されたフィールド、その注文、ソートのプリファレンスのリストを取得して、SORTステートメントを作成しています。TSQLソートデータが機能しない

-- Insert the data into the sort statements 
INSERT into @sortStatements (sortStatement) 
SELECT fo.fieldName + ' ' + b.FilterValues 
FROM red.dbo.BS_ContentRequests_Tasks_User_Fields AS a 
JOIN red.dbo.BS_ContentRequests_Tasks_Fields_Options AS fo 
ON a.fieldID = fo.fieldID 
JOIN (
    Select Main.fieldID, Left(Main.FilterValues,Len(Main.FilterValues)-1) As "FilterValues" 
    From 
    (
     Select distinct ST2.fieldID, 
     (
      Select ISNULL(ST1.[sortType], 'ASC') + ', ' AS [text()] 
      From red.dbo.BS_ContentRequests_Tasks_User_Fields ST1 
      JOIN dbo.BS_ContentRequests_Tasks_Fields_Options AS fl 
      ON st1.fieldID = fl.fieldID 
      Where ST1.fieldID = ST2.fieldID 
      AND ST1.QID = @QID 
      ORDER BY ST1.sortOrder ASC 
      For XML PATH ('') 
     ) [FilterValues] 
     From red.dbo.BS_ContentRequests_Tasks_User_Fields ST2 
     WHERE ST2.QID = @QID 
    ) [Main] 
) as b 
ON a.fieldID = b.fieldID 
WHERE a.QID = @QID 

SELECT * FROM @sortStatements 

-- Trim off the trailing comma 
SELECT @sortClause = coalesce(@sortClause + ', ', '') + sortStatement 
FROM @sortStatements 

-- Set a variable to hold the whole WHERE logic which we will append later 
SET @sort = (SELECT @sortClause) 

SELECT @sort 

sortStatementsの結果セットは以下の通りです:

enter image description here

私は私のコードで使用、最終的な文字列(@sortの結果は)次のとおりです。

requestContentType ASC, dateRequested ASC, desiredCompletion ASC, dueDate ASC, requestID DESC, requestTitle ASC, requestType DESC, startDate ASC, requestStatus ASC, taskName ASC, requestorName ASC, requestorNTID ASC, taskStatus ASC, taskID ASC 

問題ここでは、それらのフィールド名が正しい順序でなければならないということです。真ん中のステートメントでは、私はorder by節を持っていますここでsortOrder

でそれを注文すると、そのソート値を持つフィールド名、それがであるべき順番されています、最終的な出力は、順不同であなたが見ることができるように

enter image description here

..ですですこのクエリの一部は、自分のものをオーバーライドする並べ替えの種類を引き起こしますか?私はいくつかの領域にorder by clauseを配置しようとしましたが、最終出力は変更されません。

思考?

答えて

2

THENあなたは

SELECT @sortClause = coalesce(@sortClause + ', ', '') + sortStatement 
FROM @sortStatements 
Order by sortOrder 
+0

ああのおかげで、1がいることをしようとしなかったことができ@sortStatementsの世代にはsortOrderを追加 - 素晴らしい仕事! – SBB

+0

私はそのワニに噛まれました –

+0

この回答は、文書化されていないが一貫したSQL Serverの動作によって異なります。私は、[ここで](https://davegugg.wordpress.com/2015/01/29/creating-a-comma-separated-list-with-for)に記述されているように、 'FOR XML PATH'と' STUFF'を使うことをお勧めします-xml-path-and-stuff /)を使用します。 – HABO

関連する問題