powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Исключение строк из запроса.
43 сообщений из 43, показаны все 2 страниц
Исключение строк из запроса.
    #38218910
pio777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Задача: исключить из запроса все строки, где хотя-бы одна из колонок а1-а7 равняется определенному значению, а все остальные 0. Условие в where генерируется динамически, в зависимости от количества значений, которые нужно исключить.
На практике колонок больше.
Мое решение слишком медленное.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
create table #t (
id int identity primary key,
a1 int not null default 0,
a2 int not null default 0,
a3 int not null default 0,
a4 int not null default 0,
a5 int not null default 0,
a6 int not null default 0,
a7 int not null default 0
)
insert into #t 
values(1,0,1,0,5,6,7),
	  (2,0,1,0,5,6,7),
	  (1,0,1,0,8,6,7),
	  (1,0,1,0,0,0,0),
	  (1,0,1,0,1,1,0),
	  (0,2,2,0,0,2,0),
	  (1,1,1,1,1,1,1),
	  (0,0,0,0,0,0,0)

select * from #t where 
(not (1 in (a1,a2,a3,a4,a5,a6,a7)
	and a1 in (1,0)
	and a2 in (1,0)
	and a3 in (1,0)
	and a4 in (1,0)
	and a5 in (1,0)
	and a6 in (1,0)
	and a7 in (1,0))
)
and 
(not (2 in (a1,a2,a3,a4,a5,a6,a7)
	and a1 in (2,0)
	and a2 in (2,0)
	and a3 in (2,0)
	and a4 in (2,0)
	and a5 in (2,0)
	and a6 in (2,0)
	and a7 in (2,0))
)
...
Рейтинг: 0 / 0
Исключение строк из запроса.
    #38219022
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pio777,

если столбцы развернуть в строки, то можно будет проводить агрегацию
как-то так

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
create table #e (val int); -- таблица исключаемых значений
insert #e values (1), (2);

with cte as (
	select vx.id, vx.val
	from #t t
	cross apply (
		select id, val
		from (values 
			(t.id, t.a1),
			(t.id, t.a2),
			(t.id, t.a3),
			(t.id, t.a4),
			(t.id, t.a5),
			(t.id, t.a6),
			(t.id, t.a7)
		) vv(id, val)
	) vx 
),
counts as (
	select id, val, count(*) cnt
	from cte
	group by id, val
),
exrows as (
	select c.id
	from counts c
	join #e e on e.val = c.val 
	left join counts c0 on c0.id = c.id and c0.val = 0
	where c.cnt + isnull(c0.cnt, 0) = 7 -- количество проверяемых столбцов
)
select *
from #t m
where not exists(select id from exrows e where e.id = m.id)
...
Рейтинг: 0 / 0
Исключение строк из запроса.
    #38219036
pio777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shakill,
Простите, что не сообщил, но есть некоторые ограничения. Запрос формирует приложение, я могу только в where добавить свой and, cte и временные таблицы тоже не получится использовать.
...
Рейтинг: 0 / 0
Исключение строк из запроса.
    #38219041
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
select *
from #t
where sign(a1)+sign(a2)+sign(a3)+sign(a4)+sign(a5)+sign(a6)+sign(a7) = 1 
and a1+a2+a3+a4+a5+a6+a7=@myvar
...
Рейтинг: 0 / 0
Исключение строк из запроса.
    #38219049
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Glory
Код: sql
1.
2.
3.
4.
select *
from #t
where sign(a1)+sign(a2)+sign(a3)+sign(a4)+sign(a5)+sign(a6)+sign(a7) = 1 
and a1+a2+a3+a4+a5+a6+a7=@myvar

Наверно, в SIGN надо ABS добавить? А то +1-1=0
...
Рейтинг: 0 / 0
Исключение строк из запроса.
    #38219058
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapНаверно, в SIGN надо ABS добавить? А то +1-1=0
+1 и -1 - это значения уже в 2х полях. А по условию задачи, только одно поле должно быть заполнено
скорее уж так
ABS(sign(a1)+sign(a2)+sign(a3)+sign(a4)+sign(a5)+sign(a6)+sign(a7))
...
Рейтинг: 0 / 0
Исключение строк из запроса.
    #38219062
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Glory,

у автора формулировка "хотя бы одна из колонок равняется", то есть может быть и несколько, вплоть до всех, насколько я понял
...
Рейтинг: 0 / 0
Исключение строк из запроса.
    #38219066
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shakillавтора формулировка "хотя бы одна из колонок равняется", то есть может быть и несколько, вплоть до всех, насколько я понял
там 2 условия
"одна из колонок а1-а7 равняется определенному значению,
а все остальные 0"
...
Рейтинг: 0 / 0
Исключение строк из запроса.
    #38219070
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Glory, там "хотя бы одна"
...
Рейтинг: 0 / 0
Исключение строк из запроса.
    #38219075
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShakillGlory, там "хотя бы одна"
И что неправильного ?
шесть 0-лей плюс одно любое значения должны равняться заданному значению
...
Рейтинг: 0 / 0
Исключение строк из запроса.
    #38219082
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GloryShakillGlory, там "хотя бы одна"
И что неправильного ?
шесть 0-лей плюс одно любое значения должны равняться заданному значению
пять нулевых и два искомых тоже подходят в эту формулировку. семь искомых и отсутствие нулевых - тоже
...
Рейтинг: 0 / 0
Исключение строк из запроса.
    #38219085
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GloryiapНаверно, в SIGN надо ABS добавить? А то +1-1=0
+1 и -1 - это значения уже в 2х полях. А по условию задачи, только одно поле должно быть заполнено
скорее уж так
ABS(sign(a1)+sign(a2)+sign(a3)+sign(a4)+sign(a5)+sign(a6)+sign(a7))
Хотя для -1+1+1 таки нужен ABS в каждом sign
...
Рейтинг: 0 / 0
Исключение строк из запроса.
    #38219086
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shakillпять нулевых и два искомых тоже подходят в эту формулировку. семь искомых и отсутствие нулевых - тоже
"где хотя-бы одна из колонок а1-а7 равняется определенному значению, а все остальные 0"
Это как при 2 искомых колонках "а все остальные 0" ?
...
Рейтинг: 0 / 0
Исключение строк из запроса.
    #38219093
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GloryShakillпять нулевых и два искомых тоже подходят в эту формулировку. семь искомых и отсутствие нулевых - тоже
"где хотя-бы одна из колонок а1-а7 равняется определенному значению, а все остальные 0"
Это как при 2 искомых колонках "а все остальные 0" ?
ну я и говорю. если в строке в трех полях - единицы, а остальные четыре содержат ноль, то такую строку тоже надо исключить. посмотрите на фильтр у автора изначальный
...
Рейтинг: 0 / 0
Исключение строк из запроса.
    #38219106
так ?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
если все значения a(i)>=0
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select *
--,(a1+a2+a3+a4+a5+a6+a7)/nullif(sign(a1)+sign(a2)+sign(a3)+sign(a4)+sign(a5)+sign(a6)+sign(a7),0)
--,sign(a1)+sign(a2)+sign(a3)+sign(a4)+sign(a5)+sign(a6)+sign(a7)
from #t
where 
	sign(a1)+sign(a2)+sign(a3)+sign(a4)+sign(a5)+sign(a6)+sign(a7)=0
or
	(a1+a2+a3+a4+a5+a6+a7)/nullif(sign(a1)+sign(a2)+sign(a3)+sign(a4)+sign(a5)+sign(a6)+sign(a7),0) not in (1,2)
...
Рейтинг: 0 / 0
Исключение строк из запроса.
    #38219107
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну дороботайте чуть чуть
Код: sql
1.
2.
3.
4.
5.
declare @x int
set @x = 1
select *,sign(a1)+sign(a2)+sign(a3)+sign(a4)+sign(a5)+sign(a6)+sign(a7),a1+a2+a3+a4+a5+a6+a7
from #t
where (sign(a1)+sign(a2)+sign(a3)+sign(a4)+sign(a5)+sign(a6)+sign(a7))*@x = a1+a2+a3+a4+a5+a6+a7
...
Рейтинг: 0 / 0
Исключение строк из запроса.
    #38219118
так,
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так ?если все значения a(i)>=0
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select *
--,(a1+a2+a3+a4+a5+a6+a7)/nullif(sign(a1)+sign(a2)+sign(a3)+sign(a4)+sign(a5)+sign(a6)+sign(a7),0)
--,sign(a1)+sign(a2)+sign(a3)+sign(a4)+sign(a5)+sign(a6)+sign(a7)
from #t
where 
	sign(a1)+sign(a2)+sign(a3)+sign(a4)+sign(a5)+sign(a6)+sign(a7)=0
or
	(a1+a2+a3+a4+a5+a6+a7)/nullif(sign(a1)+sign(a2)+sign(a3)+sign(a4)+sign(a5)+sign(a6)+sign(a7),0) not in (1,2)


нее, хрень на таком
Код: sql
1.
2.
insert into #t values
	  (1,3,0,0,0,0,0)
...
Рейтинг: 0 / 0
Исключение строк из запроса.
    #38219120
angel_zar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
Declare @t table (
id int identity primary key,
a1 int not null default 0,
a2 int not null default 0,
a3 int not null default 0,
a4 int not null default 0,
a5 int not null default 0,
a6 int not null default 0,
a7 int not null default 0
)
insert into @t 
SELECT 1,0,1,0,5,6,7
UNION ALL
SELECT
	  2,0,1,0,5,6,7
UNION ALL
SELECT
	  1,0,1,0,8,6,7
UNION ALL
SELECT
	  1,0,1,0,0,0,0
UNION ALL
SELECT
	  1,0,1,0,1,1,0
UNION ALL
SELECT
	  0,2,2,0,0,2,0
UNION ALL
SELECT
	  1,1,1,1,1,1,1
UNION ALL
SELECT
	  0,0,0,0,0,0,0

Select * from @t

Declare @MyVal int
set @MyVal=1

Select *
from @t
where
ABS(IsNull(NullIf(a1,@MyVal),0))+
ABS(IsNull(NullIf(a2,@MyVal),0))+
ABS(IsNull(NullIf(a3,@MyVal),0))+
ABS(IsNull(NullIf(a4,@MyVal),0))+
ABS(IsNull(NullIf(a5,@MyVal),0))+
ABS(IsNull(NullIf(a6,@MyVal),0))+
ABS(IsNull(NullIf(a7,@MyVal),0))
=0


Я такую, бяку наваял
...
Рейтинг: 0 / 0
Исключение строк из запроса.
    #38219128
angel_zar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
angel_zar,

Хотя, хрень, все 0ли попадают
...
Рейтинг: 0 / 0
Исключение строк из запроса.
    #38219158
так,
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
незнаю, сумеет ли ТС "запихнуть" это в условие, но так - не врёт
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select * from #t
where id not in
	(select id from
		(select * from #t
			unpivot(val FOR a IN (a1,a2,a3,a4,a5,a6,a7))AS unpvt) a
	where val <> 0
	group by id
	having var(val)=0 and avg(val) in (1,2))
...
Рейтинг: 0 / 0
Исключение строк из запроса.
    #38219190
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pio777,

а какой результат должен получиться на Ваших данных?

И как понять " хотя-бы одна из колонок а1-а7 равняется определенному значению, а все остальные 0"
Жирные слова поясните, пожалуйста.

Это что же, исключить записи, в которых некоторые колонки равны друг другу и не равны 0, а остальные - 0?
Некоторые колонки равны заданному снаружи значению, а остальные - 0?
Одна-единственная колонка - не ноль, остальные - ноль?
Зачем в примере заданы 1 и 2? Как это соответствует сформулированному (криво и невразумительно) условию?
...
Рейтинг: 0 / 0
Исключение строк из запроса.
    #38219197
`
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
`
Гость
iappio777,

а какой результат должен получиться на Ваших данных?

в стартовом посте, есть запрос ТС, результат которого, его устраивает,
его не устраивает скорость
...
Рейтинг: 0 / 0
Исключение строк из запроса.
    #38219217
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
`iappio777,

а какой результат должен получиться на Ваших данных?

в стартовом посте, есть запрос ТС, результат которого, его устраивает,
его не устраивает скорость
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT * FROM #t WHERE NOT EXISTS
(
 SELECT *
 FROM(VALUES(a1),(a2),(a3),(a4),(a5),(a6),(a7))T(a)
 HAVING COUNT(DISTINCT a)=1 AND MAX(a)IN(1,2)AND MIN(a)IN(1,2)
     OR COUNT(DISTINCT a)=2 AND MAX(a)IN(1,2)AND MIN(a)=0
);
...
Рейтинг: 0 / 0
Исключение строк из запроса.
    #38219228
pio777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iap,

Если вы выполните мой запрос, то получите то, что должно быть.
Хотя-бы одна и колонок значит, что от 1, 2, 3,... или все 7.
Значение берется с приложения, в зависимости от того, что выберет пользователь.
Т.е. если я выбрал 1 то выпадают строки:
1,0,0,0,0,0,0
1,1,0,0,0,0,0
1,1,1,0,0,0,0
1,1,1,1,0,0,0
1,1,1,1,1,0,0
1,1,1,1,1,1,0
1,1,1,1,1,1,1
0,1,0,0,0,0,0
0,0,1,0,0,0,0
.................
В приложении можно выбрать несколько значений. Пример для исключение 1 и 2.
...
Рейтинг: 0 / 0
Исключение строк из запроса.
    #38219232
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тоже вариант подкину:)
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
-- исключить из запроса все строки, где хотя-бы одна из колонок а1-а7 равняется определенному значению, 
-- а все остальные 0. 
declare @n int=5
select *
from #t 
cross apply (select qty_nonzero=
  ABS(SIGN(a1))+ABS(SIGN(a2))+ABS(SIGN(a3))+ABS(SIGN(a4))
  +ABS(SIGN(a5))+ABS(SIGN(a6))+ABS(SIGN(a7))) c
where qty_nonzero!=1 or qty_nonzero=1 and a1+a2+a3+a4+a5+a6+a7!=@n
...
Рейтинг: 0 / 0
Исключение строк из запроса.
    #38219243
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pio777iap,

Если вы выполните мой запрос, то получите то, что должно быть.
Хотя-бы одна и колонок значит, что от 1, 2, 3,... или все 7.
Значение берется с приложения, в зависимости от того, что выберет пользователь.
Т.е. если я выбрал 1 то выпадают строки:
1,0,0,0,0,0,0
1,1,0,0,0,0,0
1,1,1,0,0,0,0
1,1,1,1,0,0,0
1,1,1,1,1,0,0
1,1,1,1,1,1,0
1,1,1,1,1,1,1
0,1,0,0,0,0,0
0,0,1,0,0,0,0
.................
В приложении можно выбрать несколько значений. Пример для исключение 1 и 2.А если Вы выполните мой, то не получите?
Я - за чистый и понятный русский язык в формулировке задачи.
...
Рейтинг: 0 / 0
Исключение строк из запроса.
    #38219259
pio777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iap,
Результат тот же, но задача ускорить, а не заменитель.
Ваш запрос в десятки тяжелее.
...
Рейтинг: 0 / 0
Исключение строк из запроса.
    #38219270
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pio777iap,
Результат тот же, но задача ускорить, а не заменитель.
Ваш запрос в десятки тяжелее.
ето вы с чего взяли ? Профайлер показывает обратное
...
Рейтинг: 0 / 0
Исключение строк из запроса.
    #38219273
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pio777iap,
Результат тот же, но задача ускорить, а не заменитель.
Ваш запрос в десятки тяжелее.

а вы вариант с дисперсией попробовали? 14157930
...
Рейтинг: 0 / 0
Исключение строк из запроса.
    #38219287
pio777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shakill,

Ваш всего лишь в 2 раза тяжелее.
...
Рейтинг: 0 / 0
Исключение строк из запроса.
    #38219290
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pio777Shakill,

Ваш всего лишь в 2 раза тяжелее.
это запрос не мой, но вообще странно. а на бОльшем количестве фильтров если сравнивать?
...
Рейтинг: 0 / 0
Исключение строк из запроса.
    #38219297
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не въехал сразу в задачу
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
-- исключить из запроса все строки, где значения колонок а1-а7 равняются либо заданному значению, либо 0. 
declare @n int=1
select *
from #t 
where 
   abs(isnull(nullif(a1,@n),0))+abs(isnull(nullif(a2,@n),0))+abs(isnull(nullif(a3,@n),0))+
   abs(isnull(nullif(a4,@n),0))+abs(isnull(nullif(a5,@n),0))+abs(isnull(nullif(a6,@n),0))+
   abs(isnull(nullif(a7,@n),0))>0
...
Рейтинг: 0 / 0
Исключение строк из запроса.
    #38219299
pio777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shakill,

Завтра попробую его на всех данных.
...
Рейтинг: 0 / 0
Исключение строк из запроса.
    #38219370
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pio777Shakill,
Простите, что не сообщил, но есть некоторые ограничения. Запрос формирует приложение, я могу только в where добавить свой and, cte и временные таблицы тоже не получится использовать.

Переименуй таблицу, а со старым именем создай view,

select ... From theTable where a1 = x1 and a2 = x2 .....
...
Рейтинг: 0 / 0
Исключение строк из запроса.
    #38219515
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не уверен, что потом не последует новой вводной)))
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
-- исключить из запроса все строки, соответствующие списку заданных значений
-- строка соответствует значению, если одна из колонок а1-а7 равняется этому значению, 
-- а все остальные содержат либо это же значение, либо 0
declare @checked table (id int)
insert @checked values(1),(2)

select t.* 
from #temp t
cross apply (select all_val=
   char(1)+CONVERT(varchar,a1)+char(1)+CONVERT(varchar,a2)+char(1)+CONVERT(varchar,a3)+
   char(1)+CONVERT(varchar,a4)+char(1)+CONVERT(varchar,a5)+char(1)+CONVERT(varchar,a6)+
   char(1)+CONVERT(varchar,a7)) a
where not exists(
   select 100500
   from @checked c
   cross apply (select chk=replace(all_val,char(1)+CONVERT(varchar,id),''))r1
   cross apply (select zero=replace(chk,char(1)+CONVERT(varchar,0),''))r2
   where len(chk)<len(all_val) and len(zero)=0
)
...
Рейтинг: 0 / 0
Исключение строк из запроса.
    #38219655
angel_zar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
Declare @t table (
id int identity primary key,
a1 int not null default 0,
a2 int not null default 0,
a3 int not null default 0,
a4 int not null default 0,
a5 int not null default 0,
a6 int not null default 0,
a7 int not null default 0
)
insert into @t 
SELECT 1,0,1,0,5,6,7
UNION ALL
SELECT
	  2,0,1,0,5,6,7
UNION ALL
SELECT
	  1,0,1,0,8,6,7
UNION ALL
SELECT
	  1,0,1,0,0,0,0
UNION ALL
SELECT
	  1,0,1,0,1,1,0
UNION ALL
SELECT
	  0,2,2,0,0,2,0
UNION ALL
SELECT
	  1,1,1,1,1,1,1
UNION ALL
SELECT
	  0,0,0,0,0,0,0

Select * from @t

Declare @MyVal int
set @MyVal=2

Select *
from @t
where
ABS(IsNull(NullIf(a1,@MyVal),0))+
ABS(IsNull(NullIf(a2,@MyVal),0))+
ABS(IsNull(NullIf(a3,@MyVal),0))+
ABS(IsNull(NullIf(a4,@MyVal),0))+
ABS(IsNull(NullIf(a5,@MyVal),0))+
ABS(IsNull(NullIf(a6,@MyVal),0))+
ABS(IsNull(NullIf(a7,@MyVal),0))
=0
and
ABS(a1)+
ABS(a2)+
ABS(a3)+
ABS(a4)+
ABS(a5)+
ABS(a6)+
ABS(a7)<>0



Вот теперь предусмотрено, чтоб все 0ли не выходили
...
Рейтинг: 0 / 0
Исключение строк из запроса.
    #38220321
pio777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так,незнаю, сумеет ли ТС "запихнуть" это в условие, но так - не врёт
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select * from #t
where id not in
	(select id from
		(select * from #t
			unpivot(val FOR a IN (a1,a2,a3,a4,a5,a6,a7))AS unpvt) a
	where val <> 0
	group by id
	having var(val)=0 and avg(val) in (1,2))



Не исключит такое: 1,0,0,0,0,0,0.
В этом случае дисперсия будет null.
...
Рейтинг: 0 / 0
Исключение строк из запроса.
    #38220398
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
то есть задача решенной не считается?
...
Рейтинг: 0 / 0
Исключение строк из запроса.
    #38220406
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cygapb-007то есть задача решенной не считается?Она была решена в первом посте!
...
Рейтинг: 0 / 0
Исключение строк из запроса.
    #38220411
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapCygapb-007то есть задача решенной не считается?Она была решена в первом посте!Насколько я понимаю, там был частный случай для выбора двух значений (1 и 2). Требовалось решение для общего случая.

Хотя возможно, я снова неверно понял постановку задачи
...
Рейтинг: 0 / 0
Исключение строк из запроса.
    #38220445
pio777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cygapb-007iapпропущено...
Она была решена в первом посте!Насколько я понимаю, там был частный случай для выбора двух значений (1 и 2). Требовалось решение для общего случая.

Хотя возможно, я снова неверно понял постановку задачи

Все вы правильно поняли. Последний ваш запрос не корректно работает когда в строке только нули.
...
Рейтинг: 0 / 0
Исключение строк из запроса.
    #38220458
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pio777Cygapb-007пропущено...
Насколько я понимаю, там был частный случай для выбора двух значений (1 и 2). Требовалось решение для общего случая.

Хотя возможно, я снова неверно понял постановку задачи

Все вы правильно поняли. Последний ваш запрос не корректно работает когда в строке только нули.Вы в этом уверены?
Код: sql
1.
2.
3.
4.
5.
-- if object_id('tempdb..#temp') is not null drop table #temp
if object_id('tempdb..#temp') is null begin
  create table #temp (id int identity, a1 int, a2 int, a3 int, a4 int, a5 int, a6 int, a7 int)
  insert #temp values (0,0,0,0,0,0,0),(1,1,1,1,1,1,1),(0,0,1,1,0,0,1),(0,1,1,0,2,0,1)
end

ida1a2a3a4a5a6a71000000030110201
...
Рейтинг: 0 / 0
Исключение строк из запроса.
    #38220478
тада, так
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pio777так,незнаю, сумеет ли ТС "запихнуть" это в условие, но так - не врёт
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select * from #t
where id not in
	(select id from
		(select * from #t
			unpivot(val FOR a IN (a1,a2,a3,a4,a5,a6,a7))AS unpvt) a
	where val <> 0
	group by id
	having var(val)=0 and avg(val) in (1,2))



Не исключит такое: 1,0,0,0,0,0,0.
В этом случае дисперсия будет null.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select * from #t
where id not in
	(select id from
		(select * from #t
			unpivot(val FOR a IN (a1,a2,a3,a4,a5,a6,a7))AS unpvt) a
	where val <> 0
	group by id
	having max(val)=min(val) and avg(val) in (1,2))
...
Рейтинг: 0 / 0
43 сообщений из 43, показаны все 2 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Исключение строк из запроса.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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