2013-08-29 68 views
1

我有一個查詢,其中我正在獲取像這樣的結果,並且正在創建下面的結果集。但我需要在最後一個如何使用Pivot或Unpivot獲得此結果

SELECT DISTINCT      LEFT(DATENAME(m, CONVERT(DATE, CONVERT(VARCHAR(10), fcp.DateKey))), 3) + ' ' + CONVERT(VARCHAR(4), year(convert(DATE, CONVERT(VARCHAR(10), fcp.DateKey)))) DatePeriod 
     ,OM.HedisOCMKey AS OutComeMeasureKey 
     ,(
      SELECT NumeratorSegmentCnt 
      FROM Fact.HedisOCMSegments omse 
      WHERE omse.SegmentLabel = 'Good' 
       AND omse.HedisOCMKey = OM.HedisOCMKey 
      ) AS Good 
     ,0 AS Fair 
     ,0 AS Poor 
     ,0 AS 'NotCategorised' 
       FROM fact.HEDISReport fcp WITH (NOLOCK) 
    INNER JOIN fact.HedisOCM OM WITH (NOLOCK) 
     ON OM.HEDISReportKey = fcp.HEDISReportKey 
    INNER JOIN dim.ConditionMetric dc WITH (NOLOCK) 
     ON dc.ConditionMetricID = OM.MetricID 
    WHERE fcp.DateKey <= @i_ReportingPeriod 

我出來得到如圖所示把像這樣的:

ConditionPrevalenceKey PopulationConditionCnt PrevalencePercent DatePeriod OutComeMeasureKey Good Fair Poor NotCategorised NotTested GoodPercentage FairPercentage PoorPercentage NotCategorisedPercentage NotTestedPercentage GoodRange FairRange PoorRange NotCategorisedRange NotTestedRange DerivedGoodValue DerivedFairValue DerivedPoorValue DerivedNotCategorised DerivedNotTested ConditionMetricName 


18018 252 0.53 Dec-12 34957 35 0 0 0 217 13.89 0 0 0 86.11 Good Fair Poor NC NoData >= 1 0 0 NotCategorized NotTested Chlamydia Screen 

那麼我怎樣才能讓我的結果集,像這樣的:

year Legend percent count Derived value field 


Dec-12 Good 13.89 35 >= 1 

Dec-12 Fair 0 0 0 

Dec-12 Poor 0 0 0 

Dec-12 NC 0 0 0 

建議我?

回答

0

我會使用UNPIVOT。在stackoverflow上,UNPIVOT上有很多線程。這是一個example。這是非常相似的another

這裏是一個普遍開始解決您的特定問題使用UNPIVOT:

SELECT [DatePeriod] , 
     [OutComeMeasureKey] , 
     [Legend] , 
     [Percent] 
FROM (SELECT DISTINCT 
       LEFT(DATENAME(m, CONVERT(DATE, CONVERT(VARCHAR(10), fcp.DateKey))), 3) + ' ' + CONVERT(VARCHAR(4), YEAR(CONVERT(DATE, CONVERT(VARCHAR(10), fcp.DateKey)))) DatePeriod , 
       OM.HedisOCMKey AS OutComeMeasureKey , 
       (SELECT NumeratorSegmentCnt 
       FROM Fact.HedisOCMSegments omse 
       WHERE omse.SegmentLabel = 'Good' AND omse.HedisOCMKey = OM.HedisOCMKey 
       ) AS Good , 
       0 AS Fair , 
       0 AS Poor , 
       0 AS 'NotCategorised' 
     FROM fact.HEDISReport fcp WITH (NOLOCK) 
       INNER JOIN fact.HedisOCM OM WITH (NOLOCK) ON OM.HEDISReportKey = fcp.HEDISReportKey 
       INNER JOIN dim.ConditionMetric dc WITH (NOLOCK) ON dc.ConditionMetricID = OM.MetricID 
     WHERE fcp.DateKey <= @i_ReportingPeriod 
     ) AS sourcetable UNPIVOT ([Percent] FOR Legend IN (Good, Fair, Poor, [NotCategorised])) AS unpvt