2013-08-29 2 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. В UNPIVOT существует много потоков в stackoverflow. Вот один 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