Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 суммирование результатов case  [new]
nerv
Member

Откуда:
Сообщений: 734
Здравствуйте!

Встал такой вопрос. Нужен технический запрос - контроль, который выдавал бы
строки, которые не попадут в другой запрос - выгрузку.
Для этого в запрос включено поле Error, в котором перечислены причины, по которым строка отсеится. Сделал в виде case:

SELECT 
 (  cast (MOTCONSU.MOTCONSU_ID as numeric (11))) ID,MOTCONSU.PATIENTS_ID,DATA164.DATE_CONSULTATION,DATA291.FAMILIQ,DATA291.IMQ,
 DATA291.OTHESTVO,DATA291.NE_LE,MEDECINS.MEDECINS_ID,MEDECINS.NOM,MEDECINS.PRENOM,
 SPECIALISATION.NAME,
 (case when DATA164.DATA164_ID is not null and DATA164.KOD_POSESCHENIYA_OMS  is null then 'Не заполнен код посещения ОМС' else case when DATA164.DATA164_ID is not null and 
DATA164.KOD_POSESCHENIYA_OMS is not null and DATA164.VID_OPLAT not in (0,5) then 'Код оплаты не соотвествует ОМС' else case when DATA164.VID_OPLAT in (0,5)  and 
DATA164.NAIMENOVANIE_POSEHENIQ <> 3  and DATA164.CEL_POSEHENIQ not in (1,4) and dbo.diagnoz_full(MOTCONSU.MOTCONSU_ID,-2) <> 'yesFOMS' then 'Диагноз отсутствует в базовой 
программе' else case when (SELECT   (COUNT (DATA22.DATA22_ID )) cnt_blank FROM  DATA22 DATA22 WHERE  (DATA22.F_ARAKTER_ZABOLEVANIQ_FOM is null)  AND (MOTCONSU.MOTCONSU_ID = 
DATA22.MOTCONSU_ID)) > 0 then 'Не указан характер заболевания ФОМС' else 'Не идентифицированная ошибка' end  end end end) Error
 
FROM
 MOTCONSU MOTCONSU JOIN DATA164 DATA164 ON MOTCONSU.MOTCONSU_ID = DATA164.MOTCONSU_ID 
 LEFT OUTER JOIN SPECIALISATION SPECIALISATION ON SPECIALISATION.SPECIALISATION_ID = DATA164.SPECIALISATION_ID 
 LEFT OUTER LOOP JOIN MEDECINS MEDECINS ON MEDECINS.MEDECINS_ID = MOTCONSU.MEDECINS_ID 
 LEFT OUTER JOIN DATA291 DATA291 ON DATA291.DATA291_ID = MOTCONSU.DATA291_ID 
WHERE
 (MOTCONSU.DATE_CONSULTATION >='20090604 00:00:00.000' and MOTCONSU.DATE_CONSULTATION - 1 < '20090605 00:00:00.000' and DATA164.DATA164_ID is not null and 
(DATA164.KOD_POSESCHENIYA_OMS  is  null or DATA164.VID_OPLAT is  null or (dbo.diagnoz_full(MOTCONSU.MOTCONSU_ID,-2) <> 'yesFOMS'  and        DATA164.VID_OPLAT in (0,5) and 
DATA164.NAIMENOVANIE_POSEHENIQ <> 3 and DATA164.CEL_POSEHENIQ not in (1,4) )or  (SELECT   (COUNT (DATA22.DATA22_ID )) blank_cnt FROM  DATA22 DATA22 WHERE  
(DATA22.F_ARAKTER_ZABOLEVANIQ_FOM is null)  AND (MOTCONSU.MOTCONSU_ID = DATA22.MOTCONSU_ID)) > 0))

Но вот проблема. При такой раскладке он в строку Error выдаст только один из вариантов ошибки, например, 'Не указан характер заболевания ФОМС' или 'Код оплаты не соотвествует ОМС'.
А если причина будет и в том и в другом, то надо вписать:
'Не указан характер заболевания ФОМС, Код оплаты не соотвествует ОМС'

То есть через пробел перечислить все варианты.
8 июн 09, 14:25    [7276613]     Ответить | Цитировать Сообщить модератору
 Re: суммирование результатов case  [new]
Le Peace
Member

Откуда: Москва
Сообщений: 8969
nerv, FAQ
8 июн 09, 14:51    [7276810]     Ответить | Цитировать Сообщить модератору
 Re: суммирование результатов case  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
case when 1=0 then '1' else '' end + case when 2=0 then '2' else '' end
так?

для спящего время бодрствования равносильно сну
8 июн 09, 15:58    [7277237]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить