Я довольно плохо знаком с более продвинутым SQL, и я тестирую хранимую процедуру, удаляя часть хранимой процедуры и просматривая промежуточные результаты.
Я вижу, что мои MemInd
результаты не показывать SF, MF и т. д. c, как ожидалось.
BEGIN
SELECT DISTINCT
UMC.CID, UMC.CONCEPT_ID, UMC.STR_VALUE, M.TITLE, M.VF_01
INTO
#UMC_TMP
FROM
DB_DEV..U_MEMBER_CONCEPT UMC WITH (NOLOCK)
LEFT JOIN
DB_DEV..MEMBER M WITH (NOLOCK) ON M.CID = UMC.CID AND M.TITLE = 'RR'
WHERE
UMC.concept_id = 501
SELECT
T.CID, T.STR_VALUE, T.TITLE, T.VF_01,
CASE
--nullif returns null if 2 expressions equal, otherwise return first expression
--isnull returns second value if first value/expression is null; otherwise return first value/expression
WHEN T.TITLE = 'RR' AND (T.STR_VALUE IS NULL OR T.STR_VALUE = '')
THEN ISNULL(NULLIF(T.TITLE, T.VF_01), NULL) -- Title is RR, no member in concept
WHEN T.TITLE = 'RR' AND T.STR_VALUE IS NOT NULL
THEN 'ERROR' -- ISNULL(NULLIF(T.TITLE,T.VF_01),NULL) -- Title is RR, member ind has a value
WHEN (T.TITLE <> 'RR' OR T.TITLE IS NULL) AND T.STR_VALUE IS NOT NULL AND T.STR_VALUE IN ('SF', 'MF')
THEN T.STR_VALUE -- This is not returning SF/MP per MemInd col. --ISNULL(NULLIF(T.STR_VALUE,T.VF_01),NULL) -- Title is not RR, member ind has a value
WHEN T.TITLE <> 'RR' AND (T.STR_VALUE IS NULL OR T.STR_VALUE ='')
THEN NULL -- Title is not RR, no member ind concept
-- WHEN T.TITLE <> 'RR' AND T.STR_VALUE = '' THEN NULL -- Title is not RR, no member ind concept
ELSE NULL
END MemInd
INTO
#UPDATES
FROM
#UMC_TMP T
SELECT * FROM #UPDATES --this is not showing SF/MF in MemIndicator as expected
DROP TABLE #UMC_TMP
DROP TABLE #UPDATES
GO
UMC_TMP:
CID CONCEPT_ID STR_VALUE TITLE VF_01
376 501 SF NULL NULL
443 501 SF NULL NULL
605 501 MF NULL NULL
550 501 RR RR
876 501 RR RR
970 501 RR RR
183 501 RR RR
726 501 RR RR
542 501 RR RR
Таблица #UPDATES
выглядит следующим образом, которая имеет значение NULL в MemInd полностью вниз (обновлено теперь для Note3). Я ожидал бы SF или MF там, или RR
CID STR_VALUE TITLE VF_01 MemInd
---------------------------------------------
550 NULL NULL NULL
876 NULL NULL NULL
970 NULL NULL NULL
183 NULL NULL NULL
726 NULL NULL NULL
376 SF NULL NULL SF
443 SF NULL NULL SF
605 MF NULL NULL MF
542 RR RR NULL
Таким образом, похоже, что оба RR из первого случая не попадают в столбец MemInd, а также SF / MF из STR_VALUE, третий случай, не попадает в столбец MemInd. Есть идеи?
Я не понимаю, почему MemInd из #UPDATES неверен. Буду признателен за любую помощь!
Примечание: я обновил #UPDATES, чтобы показать VF_01. Я думаю, что первый случай в порядке (RR уже установлен в VF_01), , но 3-й случай должен показывать SF / MP / SF47 в MemInd, когда Title <> RR и STR_VALUE не равны нулю. Это не имеет ничего общего с тем, чтобы сделать результаты неясными.
Примечание 2: я добавил результат таблицы UMC_TMP
Примечание 3: я изменил T.TITLE = NULL на T.TITLE IS NULL в 3-м случае, и MemInd теперь кажется правильным. Я обновил таблицу #UPDATES соответствующим образом в вопросе и операторе CASE.