powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Никак не соображу запрос
14 сообщений из 14, страница 1 из 1
Никак не соображу запрос
    #32043975
Фотография Gobzo Kobler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В одном поле номера страховых полисов, в другом ключ - "откачено"/"скорректировано", в третьем сумма.
Нужно выбрать только те полисы, которые встретились нечетное число раз и имеют количество "скорректированно" большее, чем "откачено".
Как сделать сложно, я знаю, а как бы наиболее коротким запросом?
...
Рейтинг: 0 / 0
Никак не соображу запрос
    #32043978
Фотография Hermitap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ты приведи свой сложный запрос.

вдруг он всетаки самый легкий
...
Рейтинг: 0 / 0
Никак не соображу запрос
    #32043979
Зайцев Фёдор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А только второе условие разве не подходит?
...
Рейтинг: 0 / 0
Никак не соображу запрос
    #32043987
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может так
Код: plaintext
1.
2.
3.
4.
Select t1.PoliceNumber from TablePolice t1
inner join TablePolice t2 on t1.ID = t2.ID and t1.Key <> t2.Key
where t1.SumPolice > t2.SumPolice and t1.Key = 'скорректировано'
Group by t1.PoliceNumber
Having count(*)% 2 
...
Рейтинг: 0 / 0
Никак не соображу запрос
    #32043989
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поспешил, сорри
Код: plaintext
1.
2.
3.
4.
5.
Select t1.PoliceNumber from TablePolice t1
inner join TablePolice t2 on t1.ID = t2.ID and t1.Key <> t2.Key
where t1.SumPolice > t2.SumPolice and t1.Key = 'скорректировано'
Group by t1.PoliceNumber
Having (count(*)% 2 ) >  0  
...
Рейтинг: 0 / 0
Никак не соображу запрос
    #32043990
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Структуру таблицы покажите ?
А если с примерами данных и результата то вообще здорово ?

ЗЫ
- четность/нечетность можно определить с помощью
having count(*)%2 > 0

- подсчитать отдельно "откачено"/"скорректировано" можно с помощью
sum(case when myfield = "откачено" then 1 else 0 end) as "откачено"_cnt
...
Рейтинг: 0 / 0
Никак не соображу запрос
    #32043992
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
select num
from @tbl
group by num
having (count(num)& 1 )> 0  and (count(num)-sum(UndoCorr))> 0 
...
Рейтинг: 0 / 0
Никак не соображу запрос
    #32043998
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
declare @tbl table (num int not null,UndoCorr tinyint,s int)
 -- UndoCorr if 1 then corr
 
 --          if 0 then undo
 
select num
from @tbl
group by num
having (count(num)& 1 )> 0  and (count(num)-sum(UndoCorr))> 0 
...
Рейтинг: 0 / 0
Никак не соображу запрос
    #32044014
dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неплохо бы действительно пример исходных данных. Я понял что они должны (могут) быть такими:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
create table polises (polnum int, status varchar( 20 ), sumstatus int)
insert into polises values ( 1 ,'скорректировано', 2 )
insert into polises values ( 1 ,'скорректировано', 3 )
insert into polises values ( 1 ,'откачено', 3 )
insert into polises values ( 1 ,'скорректировано', 1 )
insert into polises values ( 1 ,'откачено', 1 )
insert into polises values ( 2 ,'скорректировано', 4 )
insert into polises values ( 2 ,'скорректировано', 2 )
insert into polises values ( 3 ,'откачено', 1 )
insert into polises values ( 4 ,'откачено', 3 )
insert into polises values ( 4 ,'скорректировано', 5 )
insert into polises values ( 5 ,'скорректировано', 5 )
Тогда так:
Код: plaintext
1.
2.
3.
4.
select polnum
from polises 
group by polnum
having count(*) % 2  = 1  and 
sum(case status when 'откачено' then sumstatus else  0  end)<sum(case status when 'скорректировано' then sumstatus else  0  end)


Результат для приведенных данных - 1 и 5
...
Рейтинг: 0 / 0
Никак не соображу запрос
    #32044028
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Gobzo Kobler
а сумма в откачено равна сумме скорректировано?
...
Рейтинг: 0 / 0
Никак не соображу запрос
    #32044055
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
declare @tbl table (num int not null,UndoCorr tinyint,s int)
declare	@c int,@c1 int
set @c= 1 
set @c1= 0 
 -- UndoCorr if 1 then corr
 
 --          if 0 then undo
 
while @c< 10 
begin
print @c
  while @c1< 10 
  begin
print @c1
    insert into @tbl values(@c+@c1,(((((@c1+ 1 )* 10 )*@c)/(@c+@c1))^ 5 )& 1 , 0 )
    set @c1=@c1+ 1 
  end
  set @c1= 0 
  set @c=@c+ 1 
end
select * from @tbl t order by num
select num,count(num),sum(UndoCorr)
from @tbl t
group by num
having (count(num)& 1 )> 0  and (count(num)-sum(UndoCorr))> 0 
...
Рейтинг: 0 / 0
Никак не соображу запрос
    #32044063
Фотография Gobzo Kobler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думал, и так все понятно. Вот постановка:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
CREATE TABLE #policy (
	policy_id INT,
	amount MONEY,
	status VARCHAR( 10 )
)

INSERT INTO #policy SELECT  1 ,  100 , 'REVERCED'
INSERT INTO #policy SELECT  1 ,  120 , 'ADJUSTED'
INSERT INTO #policy SELECT  1 ,  110 , 'ADJUSTED'
INSERT INTO #policy SELECT  2 ,  50 , 'REVERCED'
INSERT INTO #policy SELECT  2 ,  45 , 'ADJUSTED'
INSERT INTO #policy SELECT  3 ,  250 , 'REVERCED'
INSERT INTO #policy SELECT  4 ,  5 , 'ADJUSTED'
INSERT INTO #policy SELECT  5 ,  18 , 'ADJUSTED'
INSERT INTO #policy SELECT  5 ,  30 , 'ADJUSTED'

 -- Должны быть выбраны только 1 и 4
 
 -- 5 не интересует - другой случай
 
...
Рейтинг: 0 / 0
Никак не соображу запрос
    #32044085
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
select policy_id,count(policy_id)
from #policy
group by policy_id
having (count(policy_id)& 1 )> 0  and 
sum(case status when 'REVERCED' then  1  else  0  end)<sum(case status when 'ADJUSTED' then  1  else  0  end)
...
Рейтинг: 0 / 0
Никак не соображу запрос
    #32044745
Фотография Gobzo Kobler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо! Сработало.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Никак не соображу запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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