Question

I have a query in which a table is created and left joined with a a WITH name AS() That portion of the query runs just fine and returns results as expected in the following format:

VISIT_ID | ACTUAL WEIGHT | STATED WEIGHT | WAS WEIGHT INFO OBTAINED?
123      | 1             | 0             | 0
321      | 0             | 0             | 1
567      | 0             | 1             | 0
...

I then use add a UNION ALL to it to obtain totals at the bottom of the columns. The columns ACTUAL WEIGHT and STATED WEIGHT are adding up just fine but the WAS WEIGHT INFO OBTAINED? column is off by 1.

The columns are flags 1 and 0, the third column will produce a 1 if both columns [ACTUAL WEIGHT] AND [STATED WEIGHT] are both NULL

Here is my query:

-- VARIABLE DECLARATION AND INITIALIZATION
DECLARE @SD DATE;
DECLARE @ED DATE;
SET @SD = '2013-12-16'
SET @ED = '2013-12-16';

-- THIS CREATES A TABLE WHERE ALL THE DESIRED VISIT ID NUMBERS WILL GO
-- THIS TABLE IS A UNIQUE CLUSTER
CREATE TABLE #T1
  (
  VISIT_ID VARCHAR(20) UNIQUE CLUSTERED
  )

-- WHAT GETS INSERTED INTO #T1. IT IS QUICKER TO USE #T1 THAN @T1
INSERT INTO #T1
SELECT DISTINCT PTNO_NUM

FROM smsdss.BMH_PLM_PtAcct_V

WHERE Adm_Date BETWEEN @SD AND @ED
AND Plm_Pt_Acct_Type = 'I'
AND PtNo_Num < '20000000'

OPTION(RECOMPILE);
--+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//

WITH WT AS
       (SELECT EPISODE_NO,
            MAX(CASE
                    WHEN FORM_USAGE = 'Admission'
                    AND OBSV_CD = 'A_WEIGHTOBTAINED'
                    AND DSPLY_VAL = 'Actual'
                    THEN 1
                END) AS [ACTUAL WEIGHT],
            MAX(CASE
                    WHEN FORM_USAGE = 'ADMISSION'
                    AND OBSV_CD = 'A_WEIGHTOBTAINED'
                    AND DSPLY_VAL = 'STATED'
                    THEN 1
                END) AS [STATED WEIGHT]

        FROM smsmir.obsv

        WHERE form_usage = 'ADMISSION'

        GROUP BY episode_no
        )

SELECT T1.VISIT_ID
, ISNULL(WT.[ACTUAL WEIGHT], 0) AS [ACTUAL WEIGHT]
, ISNULL(WT.[STATED WEIGHT], 0) AS [STATED WEIGHT]
, CASE
    WHEN [ACTUAL WEIGHT] IS NULL AND [STATED WEIGHT] IS NULL
    THEN 1
    ELSE 0
  END AS [WAS WEIGHT INFO OBTAINED?]

FROM #T1 T1
LEFT JOIN WT WT
ON T1.VISIT_ID = WT.episode_no

UNION ALL
SELECT 'TOTALS'
, SUM(WT.[ACTUAL WEIGHT])
, SUM(WT.[STATED WEIGHT])
, SUM(
    CASE
        WHEN [ACTUAL WEIGHT] IS NULL AND [STATED WEIGHT] IS NULL
        THEN 1
        ELSE 0
    END)

FROM #T1 T1
JOIN WT WT
ON T1.VISIT_ID = WT.[episode_no]

DROP TABLE #T1

Any info on why this is happening would be great.

I would like the info to all come out meaning I am trying to obtain the following:

VISIT_ID | ACTUAL WEIGHT | STATED WEIGHT | WAS WEIGHT INFO OBTAINED?
123      | 1             | 0             | 0
321      | 0             | 0             | 1
567      | 0             | 1             | 0
...
TOTALS   | 10            | 25            | 9
Was it helpful?

Solution

There is a discrepancy in your row code vs your total code.

The former uses OUTER LEFT JOIN, while the latter - more restrictive INNER JOIN.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top