powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите срочно!!! ВЫБРКА пояснение
5 сообщений из 5, страница 1 из 1
Помогите срочно!!! ВЫБРКА пояснение
    #32020215
Фотография Tung
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У каждого больного несколько анализов, необходимо подсчитать сколько батериовыделителей,
и сколько больных которые не выделяют батерии.
Если существует хоть один + то он является бактериовыделителем,
если все Negative то считатьчто он и не выделят батерии


У меня 2 таблицы, в первой паспортные данные, диагноз и.тд. во второй храняться анализы (их может быть у каждого
больного неограниченное количество), необходимо проверить по первым 3 анализам, сколько больных не выделяют
бактерии, и сколько выделяют. Но надо подсчитать по количеству (+,++,+++), т.е если первые два анализа ++, а третий+++,
то надо считать что он выделяет +++. Негативные у кого все 3 анализа negative.


Table1
Surname name name1 id

Абиев Магеррамали Магеррамали 123
Иванов Василий Дмитриевич 456
Семенов Евгений Андреевич 127
Щукин Александр Михайлович 588

Analis
id result number

123 negative 1
123 + 2
123 ++ 3
456 negative 1
456 negative 2
456 negative 3
127 + 1
127 negative 2
127 + 3
588 negative 1
588 ++ 2
588 +++ 3

Необходимо чтобы подсчитало так
С результатом negative 1 чел. (То.есть с id 456)
с результатом + 1 чел (То.есть с id 127)
с результатом ++ 1 чел (То.есть с id 123)
с результатом +++ 1 чел (То.есть с id 58
...
Рейтинг: 0 / 0
Помогите срочно!!! ВЫБРКА пояснение
    #32020217
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Совсем другое дело

Идея в следующем: путем замены 'negative' на '-' можно добиться нужного порядка сортировки в подзапросе

create table #table1(surname nvarchar(100), id int)
insert into #table1 values(N'Абиев Магеррамали Магеррамалиевич', 123 )
insert into #table1 values(N'Иванов Василий Дмитриевич', 456 )
insert into #table1 values(N'Семенов Евгений Андреевич', 127 )
insert into #table1 values(N'Щукин Александр Михайлович', 588 )


create table #analis(id int, result varchar(20), number int)

insert into #analis values(123, 'negative', 1)
insert into #analis values(123, '+', 2)
insert into #analis values(123, '++', 3)
insert into #analis values(123, 'negative', 4)
insert into #analis values(456, 'negative', 1)
insert into #analis values(456, 'negative', 2)
insert into #analis values(456, 'negative', 3)
insert into #analis values(456, '+', 4)
insert into #analis values(127, '+', 1)
insert into #analis values(127, 'negative', 2)
insert into #analis values(127, '+', 3)
insert into #analis values(588, 'negative', 1)
insert into #analis values(588, '++', 2)
insert into #analis values(588, '+++', 3)


select *, (select top 1 result from (select case result when 'negative' then '-' else result end as result from #analis c where c.id = a.id and number <= 3 ) as b group by result order by result desc)
from #table1 a

drop table #table1
drop table #analis
...
Рейтинг: 0 / 0
Помогите срочно!!! ВЫБРКА пояснение
    #32020219
бывший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
никак не могу понять(такие все продвинутые)...
ЗАЧЕМ ВРУЧНУЮ ДРОПАТЬ ВРЕМЕННУЮ ТАБЛИЦУ???
А ЕСЛИ ДРОПАТЬ ЕЕ ВРУЧНУЮ, ТО ЗАЧЕМ ДЕЛАТЬ
ЕЕ ВРЕМЕННОЙ???
...
Рейтинг: 0 / 0
Помогите срочно!!! ВЫБРКА пояснение
    #32020220
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Tung
Перемудрил немного, можно проще

select *, (select top 1 result from #analis b where b.id = a.id and number <= 3
order by case result when 'negative' then '-' else result end desc)
from #table1 a

2бывший
конкретно в данном примере - для того, чтобы можно было запускать скрипт много раз в QA. Иначе придется проверять возможность создания таблицы в начале скрипта, а это более длинный код(временные таблицы в данном примере будут автоматически дропаться при закрытии коннекта, а не по окончании скрипта).
Кроме того, IMHO есть такое понятие "культура программирования" - т.е. "намусорил" - убери и нечего надеяться на постороннего дядю.
...
Рейтинг: 0 / 0
Помогите срочно!!! ВЫБРКА пояснение
    #32020227
бывший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
для Glory
Спасибо, понял и полностью согласен!!!
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите срочно!!! ВЫБРКА пояснение
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]