CASE Statement within a CASE

  • I have the following SQL statement:

    SELECT tbMeasurement.MonitoredEntityCode, CASE WHEN tbMeasurement.MonitoredLocationCode = 'EMISSION_POINT_1' THEN tbMeasurement.NumericResult END AS 'EMISSION_POINT_1'

    ,CASE WHEN tbMeasurement.MonitoredLocationCode = 'EMISSION_POINT_2' THEN tbMeasurement.NumericResult END AS 'EMISSION_POINT_2'

    ,CASE WHEN tbMeasurement.MonitoredLocationCode = 'EMISSION_POINT_3' THEN tbMeasurement.NumericResult END AS 'EMISSION_POINT_3'

    ,CASE WHEN tbMeasurement.MonitoredLocationCode = 'EMISSION_POINT_4' THEN tbMeasurement.NumericResult END AS 'EMISSION_POINT_4'

    ,CASE WHEN tbMeasurement.MonitoredLocationCode = 'EMISSION_POINT_5' THEN tbMeasurement.NumericResult END AS 'EMISSION_POINT_5'

    ,CASE WHEN tbMeasurement.MonitoredLocationCode = 'EMISSION_POINT_6' THEN tbMeasurement.NumericResult END AS 'EMISSION_POINT_6'

    ,CASE WHEN tbMeasurement.MonitoredLocationCode = 'EMISSION_POINT_7' THEN tbMeasurement.NumericResult END AS 'EMISSION_POINT_7'

    ,CASE WHEN tbMeasurement.MonitoredLocationCode = 'EMISSION_POINT_8' THEN tbMeasurement.NumericResult END AS 'EMISSION_POINT_8'

    ,CASE WHEN tbMeasurement.MonitoredLocationCode = 'EMISSION_POINT_9' THEN tbMeasurement.NumericResult END AS 'EMISSION_POINT_9'

    ,CASE WHEN tbMeasurement.MonitoredLocationCode = 'FUGITIVE_TOTAL' THEN tbMeasurement.NumericResult END AS 'FUGITIVE_TOTAL'

    ,CASE WHEN tbMeasurement.MonitoredLocationCode = 'ACCIDENTAL_TOTAL' THEN tbMeasurement.NumericResult END AS 'ACCIDENTAL TOTAL',

    tbMeasurement.SampleID, tbMeasurement.ParameterCode, tbParameter.ParameterDescription,

    tbMeasurementExtraData.M_C_E, tbMeasurementExtraData.MethodCode,

    tbMeasurementExtraData.Description

    FROM (tbMeasurement INNER JOIN

    tbParameter ON tbMeasurement.ParameterCode = tbParameter.ParameterCode) INNER JOIN

    tbMeasurementExtraData ON (tbMeasurement.ParameterCode = tbMeasurementExtraData.ParameterCode)

    AND (tbMeasurement.SampleID = tbMeasurementExtraData.SampleID)

    AND (tbMeasurement.MonitoredLocationCode = tbMeasurementExtraData.MonitoredLocationCode)

    AND (tbMeasurement.MonitoredEntityCode = tbMeasurementExtraData.MonitoredEntityCode)

    As you can see I as using a Case statement to create a new column for each type of emission point found and for Fugitive and Accidental Totals. What I am also trying to do is to replace the null values returned for Fugitive and Accidental Totals with a 0. I have tried using an inner case statement but that doesn't seem to work, any suggestions? I have also tried the replace statement, no effect.

    Michael.

  • If i have understood correctly.........

    CASE WHEN tbMeasurement.MonitoredLocationCode = 'FUGITIVE_TOTAL' THEN ISNULL(tbMeasurement.NumericResult,0) END AS 'FUGITIVE_TOTAL'

    ,CASE WHEN tbMeasurement.MonitoredLocationCode = 'ACCIDENTAL_TOTAL' THEN ISNULL(tbMeasurement.NumericResult,0) END AS 'ACCIDENTAL TOTAL'

    "Keep Trying"

  • Using ISNULL?

    [font="Courier New"]SELECT m.MonitoredEntityCode,

       CASE WHEN m.MonitoredLocationCode = 'EMISSION_POINT_1' THEN m.NumericResult END AS 'EMISSION_POINT_1',

       CASE WHEN m.MonitoredLocationCode = 'EMISSION_POINT_2' THEN m.NumericResult END AS 'EMISSION_POINT_2',

       CASE WHEN m.MonitoredLocationCode = 'EMISSION_POINT_3' THEN m.NumericResult END AS 'EMISSION_POINT_3',

       CASE WHEN m.MonitoredLocationCode = 'EMISSION_POINT_4' THEN m.NumericResult END AS 'EMISSION_POINT_4',

       CASE WHEN m.MonitoredLocationCode = 'EMISSION_POINT_5' THEN m.NumericResult END AS 'EMISSION_POINT_5',

       CASE WHEN m.MonitoredLocationCode = 'EMISSION_POINT_6' THEN m.NumericResult END AS 'EMISSION_POINT_6',

       CASE WHEN m.MonitoredLocationCode = 'EMISSION_POINT_7' THEN m.NumericResult END AS 'EMISSION_POINT_7',

       CASE WHEN m.MonitoredLocationCode = 'EMISSION_POINT_8' THEN m.NumericResult END AS 'EMISSION_POINT_8',

       CASE WHEN m.MonitoredLocationCode = 'EMISSION_POINT_9' THEN m.NumericResult END AS 'EMISSION_POINT_9',

       CASE WHEN m.MonitoredLocationCode = 'FUGITIVE_TOTAL'   THEN ISNULL(m.NumericResult, 0) END AS 'FUGITIVE_TOTAL',

       CASE WHEN m.MonitoredLocationCode = 'ACCIDENTAL_TOTAL' THEN ISNULL(m.NumericResult, 0) END AS 'ACCIDENTAL TOTAL',

       m.SampleID, m.ParameterCode,

       p.ParameterDescription,

       e.M_C_E, e.MethodCode, e.Description

    FROM tbMeasurement m

    INNER JOIN tbParameter p ON m.ParameterCode = p.ParameterCode

    INNER JOIN tbMeasurementExtraData e ON m.ParameterCode = e.ParameterCode

       AND m.SampleID = e.SampleID

       AND m.MonitoredLocationCode = e.MonitoredLocationCode

       AND m.MonitoredEntityCode = e.MonitoredEntityCode

    [/font]

    Cheers

    ChrisM

    “Write the query the simplest way. If through testing it becomes clear that the performance is inadequate, consider alternative query forms.” - Gail Shaw

    For fast, accurate and documented assistance in answering your questions, please read this article.
    Understanding and using APPLY, (I) and (II) Paul White
    Hidden RBAR: Triangular Joins / The "Numbers" or "Tally" Table: What it is and how it replaces a loop Jeff Moden

Viewing 3 posts - 1 through 3 (of 3 total)

You must be logged in to reply to this topic. Login to reply