0

PIVOT テーブルからデータを返すプロシージャがあります。PIVOT が列を特定の順序で表示するように、このデータを並べ替えるだけです。Regions テーブルの「SortOrder」フィールドで並べ替える必要があります。これが私のスクリプトです。実際には、sortorder フィールドが返される必要はありません。sortorder で並べ替えられた列が必要なだけです。どんな助けでも大歓迎です

 CREATE TABLE #Temp  
(  
 Region VARCHAR(255),
 SortOrder INT,  
 Visible BIT  
)  

INSERT INTO #Temp  
SELECT R.Region, R.SortOrder, CASE WHEN (ISNULL(R_SR.RegionID,0) = 0 AND     ISNULL(R_SR_Serv.RegionID,0) = 0) THEN 0 ELSE 1 END AS Visible  
FROM ServiceRecord SR  
INNER JOIN Sites S ON SR.SiteID = S.SiteID  
INNER JOIN Regions R ON R.SiteID = S.SiteID  
LEFT OUTER JOIN lkup_Region_ServiceRecord R_SR ON R_SR.RegionID = R.RegionID AND R_SR.ServiceRecordID = SR.ServiceRecordID  
LEFT OUTER JOIN lkup_Region_ServiceRecord_Serv R_SR_Serv ON R_SR_Serv.RegionID = R.RegionID AND R_SR_Serv.ServiceRecordID = SR.ServiceRecordID  
WHERE SR.ServiceRecordID = @ServiceRecordID
 AND R.RegionID % 100 != 0  
 AND SR.IsDeleted = 0  
 AND SR.English = 1  
 AND SR.PostedMain = 1  
ORDER BY SR.ServiceRecordID, R.SortOrder

DECLARE @RegionList varchar(2000),@SQL varchar(max)  
SELECT @RegionList = STUFF((SELECT DISTINCT ',' + QuoteName(Region) FROM #Temp ORDER BY ',' + QuoteName(Region) FOR XML PATH('')),1,1,'')  

SET @SQL='  
SELECT  
   A.*
FROM   
   (  
   SELECT  
     Region,
     CAST(Visible AS INT) AS Visible  
  FROM #Temp
   ) B
   PIVOT(MAX(Visible) FOR Region IN (' + @RegionList + ')) A
   ORDER BY SortOrder;';  

EXEC (@SQL);

最初の選択 (PIVOT の前) で、次のテーブルを取得します (これは、ピボットしたい順序です。

London and Middlesex    0
Oxford and Norfolk  1
Elgin   0
Huron and Perth 1
Grey and Bruce  0

ピボット後、これが私の結果です

Elgin   Grey and Bruce  Huron and Perth London and Middlesex    Oxford and Norfolk
0           0           1               0                        1

ピボットの前にテーブルが示すのと同じ順序で列を並べ替えようとしています (ロンドンとミドルセックスが最初、オックスフォードとノーフォークが 2 番目など)。

4

1 に答える 1

5

ORDER BY SortOrder最後の列を並べ替える場合は、 を取得するクエリにを追加できる必要がある@regionListため、コードを次のように変更します。

DECLARE @RegionList varchar(2000),@SQL varchar(max)  
SELECT @RegionList = STUFF((SELECT ',' + QuoteName(Region) 
                            FROM #Temp 
                            GROUP BY Region, SortOrder
                            ORDER BY SortOrder  --- add the SortOrder here
                            FOR XML PATH('')),1,1,'')  

現在のコードは、データを地域別に並べ替えているため、アルファベット順になっています。このリストに SortOrder を実装する必要があります。

于 2013-06-18T15:27:20.187 に答える