1

我有一个查询,我得到这样的结果,我得到下面的结果集。但我需要得到如上一个所示

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

建议我???

4

1 回答 1

0

我会使用 UNPIVOT。在 stackoverflow 上有很多关于 UNPIVOT 的线程。这是一个例子。这是另一个非常相似的。

这是使用 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 
于 2013-08-29T14:31:32.233 回答