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

Откуда:
Сообщений: 4
Подскажите пожалуйста, как мне сделать группировку вот этого:

SELECT TOP 100
  MOTCONSU.DATE_CONSULTATION, PATIENTS.PATIENTS_ID, LAB_METHODS.LABEL, DS_RESTESTS.VAL, DS_RESTESTS.DS_RESTESTS_ID, 
  (case when MEDECINS.NOM is null then 'Без направления' else (MEDECINS.NOM+' '+Substring(MEDECINS.PRENOM,1,1)+'. '+
+Substring(Substring(MEDECINS.PRENOM,CharIndex(' ',MEDECINS.PRENOM+ ' ',0)+1,100),1,1)+'.') end ) DOC ,
  (select DS_RESTESTS.VAL where DS_RESTESTS.ITEM=1) F1, (select DS_RESTESTS.VAL where DS_RESTESTS.ITEM=2) F2,
  (select DS_RESTESTS.VAL where DS_RESTESTS.ITEM=3) F3, (PATIENTS.FULL_NAME) FIO_PAT, 
 MOTCONSU.MOTCONSU_ID
FROM
 MOTCONSU MOTCONSU WITH(NOLOCK)  JOIN DS_RESTESTS DS_RESTESTS WITH(NOLOCK)  ON MOTCONSU.MOTCONSU_ID = DS_RESTESTS.MOTCONSU_ID 
 LEFT OUTER JOIN LAB_METHODS LAB_METHODS WITH(NOLOCK)  ON LAB_METHODS.LAB_METHODS_ID = DS_RESTESTS.LAB_METHODS_ID 
 JOIN LAB_METHODBIO LAB_METHODBIO WITH(NOLOCK)  ON LAB_METHODS.LAB_METHODS_ID = LAB_METHODBIO.LAB_METHODS_ID 
 LEFT OUTER JOIN DS_PARAMS DS_PARAMS_1 WITH(NOLOCK)  ON DS_PARAMS_1.DS_PARAMS_ID = LAB_METHODBIO.DS_PARAMS_ID 
 LEFT OUTER JOIN DS_PRMGRP DS_PRMGRP WITH(NOLOCK)  ON DS_PRMGRP.DS_PRMGRP_ID = DS_PARAMS_1.DS_PRMGRP_ID 
 LEFT OUTER JOIN DS_TESTS DS_TESTS WITH(NOLOCK)  ON DS_TESTS.DS_TESTS_ID = DS_RESTESTS.DS_TESTS_ID 
 JOIN PATIENTS PATIENTS WITH(NOLOCK)  ON PATIENTS.PATIENTS_ID = MOTCONSU.PATIENTS_ID 
 LEFT OUTER JOIN DIR_ANSW DIR_ANSW WITH(NOLOCK)  ON MOTCONSU.MOTCONSU_ID = DIR_ANSW.MOTCONSU_RESP_ID 
 LEFT OUTER JOIN PATDIREC PATDIREC WITH(NOLOCK)  ON PATDIREC.PATDIREC_ID = DIR_ANSW.PATDIREC_ID 
 LEFT OUTER JOIN MEDECINS MEDECINS WITH(NOLOCK)  ON MEDECINS.MEDECINS_ID = PATDIREC.MEDECINS_CREATOR_ID 
WHERE
 (MOTCONSU.MODELS_ID= 864 and MOTCONSU.REC_STATUS<>'X')
 AND (isnull( PATIENTS.TESTOVYY,0)<>1)


Для того что бы получить такой результат:

PAT_ID LABEL DOC F1 F2 F3 MOTCONSU_ID
3092766 Эпителий Без направления NULL плоский умеренное кол-во плоский умеренное кол-во 8567592
3092766 Лейкоциты Без направления NULL 20-25 15-15 8567592
3092766 Микрофлора Без направления NULL палочковая.умеренная палочковая.умеренная 8567592
3092766 Трихомонады Без направления NULL не обнаружены не обнаружены 8567592
3092766 Гонококки Без направления NULL не обнаружены не обнаружены 8567592


Сейчас у меня получается следующее:

PAT_ID LABEL VAL DOC F1 F2 F3 MOTCONSU_ID
3092766 Эпителий плоский умеренное кол-во Без направления NULL плоский умеренное кол-во NULL 8567592
3092766 Эпителий плоский умеренное кол-во Без направления NULL NULL плоский умеренное кол-во 8567592
3092766 Лейкоциты 20-25 Без направления NULL 20-25 NULL 8567592
3092766 Лейкоциты 15-15 Без направления NULL NULL 15-15 8567592
3092766 Микрофлора палочковая.умеренная Без направления NULL палочковая.умеренная NULL 8567592
3092766 Микрофлора палочковая.умеренная Без направления NULL NULL палочковая.умеренная 8567592
3092766 Трихомонады не обнаружены Без направления NULL не обнаружены NULL 8567592
3092766 Трихомонады не обнаружены Без направления NULL NULL не обнаружены 8567592
3092766 Гонококки не обнаружены Без направления NULL не обнаружены NULL 8567592
3092766 Гонококки не обнаружены Без направления NULL NULL не обнаружены 8567592


Сообщение было отредактировано: 13 сен 19, 13:33
13 сен 19, 13:04    [21970273]     Ответить | Цитировать Сообщить модератору
 Re: Группировка с полями null  [new]
Anastasia1495
Member

Откуда:
Сообщений: 4
Anastasia1495
Подскажите пожалуйста, как мне сделать группировку вот этого:

SELECT TOP 100
 MOTCONSU.DATE_CONSULTATION, PATIENTS.PATIENTS_ID, LAB_METHODS.LABEL, DS_RESTESTS.VAL, DS_RESTESTS.DS_RESTESTS_ID, 
 (case when MEDECINS.NOM is null then 'Без направления' else (MEDECINS.NOM+' '+Substring(MEDECINS.PRENOM,1,1)+'. '+
+Substring(Substring(MEDECINS.PRENOM,CharIndex(' ',MEDECINS.PRENOM+ ' ',0)+1,100),1,1)+'.') end ) DOC
 , (select DS_RESTESTS.VAL where DS_RESTESTS.ITEM=1) F1, (select DS_RESTESTS.VAL where DS_RESTESTS.ITEM=2) F2, (select DS_RESTESTS.VAL where DS_RESTESTS.ITEM=3) F3, (PATIENTS.FULL_NAME) FIO_PAT, 
 MOTCONSU.MOTCONSU_ID
FROM
 MOTCONSU MOTCONSU WITH(NOLOCK)  JOIN DS_RESTESTS DS_RESTESTS WITH(NOLOCK)  ON MOTCONSU.MOTCONSU_ID = DS_RESTESTS.MOTCONSU_ID 
 LEFT OUTER JOIN LAB_METHODS LAB_METHODS WITH(NOLOCK)  ON LAB_METHODS.LAB_METHODS_ID = DS_RESTESTS.LAB_METHODS_ID 
 JOIN LAB_METHODBIO LAB_METHODBIO WITH(NOLOCK)  ON LAB_METHODS.LAB_METHODS_ID = LAB_METHODBIO.LAB_METHODS_ID 
 LEFT OUTER JOIN DS_PARAMS DS_PARAMS_1 WITH(NOLOCK)  ON DS_PARAMS_1.DS_PARAMS_ID = LAB_METHODBIO.DS_PARAMS_ID 
 LEFT OUTER JOIN DS_PRMGRP DS_PRMGRP WITH(NOLOCK)  ON DS_PRMGRP.DS_PRMGRP_ID = DS_PARAMS_1.DS_PRMGRP_ID 
 LEFT OUTER JOIN DS_TESTS DS_TESTS WITH(NOLOCK)  ON DS_TESTS.DS_TESTS_ID = DS_RESTESTS.DS_TESTS_ID 
 JOIN PATIENTS PATIENTS WITH(NOLOCK)  ON PATIENTS.PATIENTS_ID = MOTCONSU.PATIENTS_ID 
 LEFT OUTER JOIN DIR_ANSW DIR_ANSW WITH(NOLOCK)  ON MOTCONSU.MOTCONSU_ID = DIR_ANSW.MOTCONSU_RESP_ID 
 LEFT OUTER JOIN PATDIREC PATDIREC WITH(NOLOCK)  ON PATDIREC.PATDIREC_ID = DIR_ANSW.PATDIREC_ID 
 LEFT OUTER JOIN MEDECINS MEDECINS WITH(NOLOCK)  ON MEDECINS.MEDECINS_ID = PATDIREC.MEDECINS_CREATOR_ID 
WHERE
 (MOTCONSU.MODELS_ID= 864 and MOTCONSU.REC_STATUS<>'X')
 AND (isnull( PATIENTS.TESTOVYY,0)<>1)


Для того что бы получить такой результат:

PAT_ID LABEL DOC F1 F2 F3 MOTCONSU_ID
3092766 Эпителий Без направления NULL плоский умеренное кол-во плоский умеренное кол-во 8567592
3092766 Лейкоциты Без направления NULL 20-25 15-15 8567592
3092766 Микрофлора Без направления NULL палочковая.умеренная палочковая.умеренная 8567592
3092766 Трихомонады Без направления NULL не обнаружены не обнаружены 8567592
3092766 Гонококки Без направления NULL не обнаружены не обнаружены 8567592


Сейчас у меня получается следующее:

PAT_ID LABEL VAL DOC F1 F2 F3 MOTCONSU_ID
3092766 Эпителий плоский умеренное кол-во Без направления NULL плоский умеренное кол-во NULL 8567592
3092766 Эпителий плоский умеренное кол-во Без направления NULL NULL плоский умеренное кол-во 8567592
3092766 Лейкоциты 20-25 Без направления NULL 20-25 NULL 8567592
3092766 Лейкоциты 15-15 Без направления NULL NULL 15-15 8567592
3092766 Микрофлора палочковая.умеренная Без направления NULL палочковая.умеренная NULL 8567592
3092766 Микрофлора палочковая.умеренная Без направления NULL NULL палочковая.умеренная 8567592
3092766 Трихомонады не обнаружены Без направления NULL не обнаружены NULL 8567592
3092766 Трихомонады не обнаружены Без направления NULL NULL не обнаружены 8567592
3092766 Гонококки не обнаружены Без направления NULL не обнаружены NULL 8567592
3092766 Гонококки не обнаружены Без направления NULL NULL не обнаружены 8567592
13 сен 19, 13:13    [21970277]     Ответить | Цитировать Сообщить модератору
 Re: Группировка с полями null  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
[quot Anastasia1495]
Anastasia1495
Подскажите пожалуйста, как мне сделать группировку вот этого:

Вы присоединяете все строки, а показываете по фильтру, отсюда лишние NULL-ы:

JOIN DS_RESTESTS DS_RESTESTS WITH(NOLOCK)  ON MOTCONSU.MOTCONSU_ID = DS_RESTESTS.MOTCONSU_ID 


Надо присоединять сразу с фильтром, задав разные алиасы:
JOIN DS_RESTESTS F2 WITH(NOLOCK)  ON MOTCONSU.MOTCONSU_ID = F2.MOTCONSU_ID anf F2.ITEM=2
JOIN DS_RESTESTS F2 WITH(NOLOCK)  ON MOTCONSU.MOTCONSU_ID = F3.MOTCONSU_ID anf F3.ITEM=3
13 сен 19, 13:20    [21970284]     Ответить | Цитировать Сообщить модератору
 Re: Группировка с полями null  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
[quot Minamoto]
Anastasia1495
пропущено...

Вы присоединяете все строки, а показываете по фильтру, отсюда лишние NULL-ы:

JOIN DS_RESTESTS DS_RESTESTS WITH(NOLOCK)  ON MOTCONSU.MOTCONSU_ID = DS_RESTESTS.MOTCONSU_ID 


Надо присоединять сразу с фильтром, задав разные алиасы:
JOIN DS_RESTESTS F2 WITH(NOLOCK)  ON MOTCONSU.MOTCONSU_ID = F2.MOTCONSU_ID anf F2.ITEM=2
JOIN DS_RESTESTS F2 WITH(NOLOCK)  ON MOTCONSU.MOTCONSU_ID = F3.MOTCONSU_ID anf F3.ITEM=3
Во второй строке другой алиас только...
JOIN DS_RESTESTS F2 WITH(NOLOCK)  ON MOTCONSU.MOTCONSU_ID = F2.MOTCONSU_ID anf F2.ITEM=2
JOIN DS_RESTESTS F3 WITH(NOLOCK)  ON MOTCONSU.MOTCONSU_ID = F3.MOTCONSU_ID anf F3.ITEM=3
13 сен 19, 13:21    [21970286]     Ответить | Цитировать Сообщить модератору
 Re: Группировка с полями null  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36686
А есть веские причины писать with nolock рядом с каждой таблицей вместо того, чтобы один раз написать set TIL RUC в начале батча?
14 сен 19, 00:38    [21970796]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить