私は作業を始めたばかりSQL PIVOT
で、列の順序に問題があり、それを修正する方法について知りたがっていました。ここや他のサイトの PIVOT 関連の投稿をいくつか調べましたが、すぐに関連性があると思われるものはありませんでした。
各クエリにハードコーディングされた OrderBy ファイルを追加したことに気付くでしょうが、それは役に立ちません。ピトーが列を並べ替えているのは [説明] フィールドだと思います。したがって、現在、列は次の順序で左から右に表示されます。
[料金期間]、[非常に良い]、[良い]、[中間の数]、[満足できる]、[満足できない]、[非常に良い] .
代わりに、次の順序が必要です。
[料金期間]、[暫定番号]、[非常に良い]、[非常に良い]、[良い]、[満足できる]、[満足できない] .
私はそれが純粋なピボットの問題ではないかもしれないと考え始めています.
ストアド プロシージャは次のようになります。
DECLARE @cols NVARCHAR(MAX)
DECLARE @query NVARCHAR(MAX)
SET NOCOUNT ON;
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
SELECT @cols = STUFF(( SELECT DISTINCT TOP 100 PERCENT '],[' + [Description]
FROM dbo.vQualScoringGrade
ORDER BY '],[' + [Description] FOR XML PATH('')), 1,2,'') + ']'
SET @query = N'SELECT [Fee Period], ' + @cols + ' FROM
(SELECT [Award Fee Period],GradeCount, Description, Value, OrderBy FROM
dbo.vQualScoringGrade) p
PIVOT (SUM([Value]) for [Description] IN ( ' + @cols + ' )) AS pvt ORDER BY [Fee Period]'
execute(@query)
sproc をフィードするビュー [vQualScoringGrade] は次のようになります。
SELECT TOP (100) PERCENT [Fee Period], GradeCount, Description,
GradeCount AS Value, OrderBy
FROM (SELECT [Fee Period], 'No of Interim' AS Description, COUNT(VerNumber) AS GradeCount, 1 AS
OrderBy
FROM dbo.vQualScoringExcellent AS vQualScoringExcellent
GROUP BY GIIANumber, Description
UNION
SELECT [Fee Period], 'Excellent' AS Description, COUNT(Description) AS GradeCount, 2 AS OrderBy
FROM dbo.vQualScoringExcellent AS vQualScoringExcellent_1
GROUP BY VerNumber, Description
UNION
SELECT [Fee Period], 'Very Good' AS Description, COUNT(Description) AS GradeCount, 3 AS OrderBy
FROM dbo.vQualScoringVeryGood AS vQualScoringVeryGood
GROUP BY VerNumber, Description
UNION
SELECT [Fee Period], 'Good' AS Description, COUNT(Description) AS GradeCount, 4 AS OrderBy
FROM dbo.vQualScoringGood AS vQualScoringGood
GROUP BY VerNumber, Description
UNION
SELECT [Fee Period], 'Satisfactory' AS Description, COUNT(Description) AS GradeCount, 5 AS
OrderBy
FROM dbo.vQualScoringSatisfactory AS vQualScoringSatisfactory
GROUP BY VerNumber, Description
UNION
SELECT [Fee Period], 'Unsatisfactory' AS Description, COUNT(Description) AS GradeCount, 6 AS OrderBy
FROM dbo.vQualScoringUnsatisfactory AS vQualScoringUnsatisfactory
GROUP BY VerNumber, Description) AS QualScoringGrade
ORDER BY OrderBy