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

Откуда:
Сообщений: 206
Здравствуйте! Имеется таблица:

city                     count1  count2  count 3  count4
Moskow                  1           0           1          0
St.peterburg           2           0           0          0
Voronezh                1           3           0          0
Elsk                         1           1           0          1

Как выбрать только то, что имеет одинаковое значение в count1-count4(исключая нули)
т.е. на выходе нужно:

city                     count1  count2  count 3  count4
Moskow                  1           0           1          0
Elsk                         1          1            0          1
11 авг 13, 13:57    [14693210]     Ответить | Цитировать Сообщить модератору
 Re: Поиск одинаковых записей в разных столбцах  [new]
aleks2
Guest
Поднимите мне веки! (с) Вий.
11 авг 13, 14:10    [14693225]     Ответить | Цитировать Сообщить модератору
 Re: Поиск одинаковых записей в разных столбцах  [new]
boobonick
Member [заблокирован]

Откуда:
Сообщений: 206
Это к чему вообще?
11 авг 13, 14:21    [14693231]     Ответить | Цитировать Сообщить модератору
 Re: Поиск одинаковых записей в разных столбцах  [new]
qwerty112
Guest
boobonick
т.е. на выходе нужно:

city                     count1  count2  count 3  count4
Moskow                  1           0           1          0
Elsk                         1          1            0          1

а это, почему не "результат" ?
city                     count1  count2  count 3  count4
Moskow                  1           0           1          0
Voronezh                1           3           0          0


---------
select * from @t t1
where exists (select 1 from @t t2
				where (t1.count1=t2.count1 or t1.count1*t2.count1=0)
				and (t1.count2=t2.count2 or t1.count2*t2.count2=0)
				and (t1.count3=t2.count3 or t1.count3*t2.count3=0)
				and (t1.count4=t2.count4 or t1.count4*t2.count4=0)
				and t1.city<>t2.city)

city                 count1      count2      count3      count4
-------------------- ----------- ----------- ----------- -----------
Moskow               1           0           1           0
Voronezh             1           3           0           0
Elsk                 1           1           0           1
11 авг 13, 14:25    [14693234]     Ответить | Цитировать Сообщить модератору
 Re: Поиск одинаковых записей в разных столбцах  [new]
boobonick
Member [заблокирован]

Откуда:
Сообщений: 206
автор
а это, почему не "результат" ?
Необходимы совпадения, т.е. совпадения от двух столбцов и выше в строке
11 авг 13, 14:30    [14693237]     Ответить | Цитировать Сообщить модератору
 Re: Поиск одинаковых записей в разных столбцах  [new]
тетя груша
Guest
boobonick,

(c1 + c2 + c3 + c4) / coalesce(c1, c2, c3, c4) in (1, 2, 3, 4)
11 авг 13, 14:30    [14693238]     Ответить | Цитировать Сообщить модератору
 Re: Поиск одинаковых записей в разных столбцах  [new]
qwerty112
Guest
boobonick
автор
а это, почему не "результат" ?
Необходимы совпадения, т.е. совпадения от двух столбцов и выше в строке

гмм, ты эта - оченята-то протри, ага
тут
city                     count1  count2  count 3  count4
Moskow                  1           0           1          0
Elsk                    1           1           0          1

и тут
city                     count1  count2  count 3  count4
Moskow                  1           0           1          0
Voronezh                1           3           0          0

одинаковое кол-во совпадений
11 авг 13, 14:34    [14693243]     Ответить | Цитировать Сообщить модератору
 Re: Поиск одинаковых записей в разных столбцах  [new]
тетя груша
Guest
тетя груша,

(c1 + c2 + c3 + c4) / coalesce(c1, c2, c3, c4) in (1, 2, 3, 4)
and (c1 + c2 + c3 + c4) % coalesce(c1, c2, c3, c4) = 0

ну и вместо coalesce написать case when....then... else... end... аналог coalesce тока для 0 а не NULL
11 авг 13, 14:35    [14693245]     Ответить | Цитировать Сообщить модератору
 Re: Поиск одинаковых записей в разных столбцах  [new]
тетя груша
Guest
не будет работать. сцкблнхпздц. :(
11 авг 13, 14:38    [14693250]     Ответить | Цитировать Сообщить модератору
 Re: Поиск одинаковых записей в разных столбцах  [new]
boobonick
Member [заблокирован]

Откуда:
Сообщений: 206
автор
одинаковое кол-во совпадений
(исключая нули)
11 авг 13, 14:40    [14693258]     Ответить | Цитировать Сообщить модератору
 Re: Поиск одинаковых записей в разных столбцах  [new]
boobonick
Member [заблокирован]

Откуда:
Сообщений: 206
тетя Грунь, буду в этом направление двигаться
11 авг 13, 14:43    [14693263]     Ответить | Цитировать Сообщить модератору
 Re: Поиск одинаковых записей в разных столбцах  [new]
тетка грушка
Guest
стимуляция простаты...

with
d(city, count1, count2, count3, count4) as
(
select 'Moskow',                  1,           0   ,        1    ,      0 union all
select 'St.peterburg',           2,           0 ,          0    ,      0 union all
select 'Voronezh',                1,           3  ,         0    ,      0 union all
select 'Elsk',                         1 ,          1,           0    ,      1
),
asshole(n) as
(
	select 1 union all
	select 2 union all
	select 3 union all
	select 4

)
select  city, count1, count2, count3, count4
from
(
	select *, case when n = 1 then count1
				else
					case when n = 2 then count2
					 else
						 case when n = 3 then count3
						  else count4
						 end
					end
				end as c

	from d
			cross join
		asshole
) z
group by city, count1, count2, count3, count4
having  sum(c) / min(case when c = 0 then null else c end) = sum(c) / max(case when c = 0 then null else c end) and count(case when c = 0 then null else c end) > 1
11 авг 13, 14:59    [14693303]     Ответить | Цитировать Сообщить модератору
 Re: Поиск одинаковых записей в разных столбцах  [new]
тетка грушка
Guest
having 
	sum(c) / min(case when c = 0 then null else c end) = sum(c) / max(case when c = 0 then null else c end) and
	sum(c) % min(case when c = 0 then null else c end) = 0 and
	sum(c) % max(case when c = 0 then null else c end) = 0 and
	count(case when c = 0 then null else c end) > 1


багофикс
11 авг 13, 15:02    [14693312]     Ответить | Цитировать Сообщить модератору
 Re: Поиск одинаковых записей в разных столбцах  [new]
тетя груша
Guest
having 
	min(case when c = 0 then null else c end) = max(case when c = 0 then null else c end) and
	count(case when c = 0 then null else c end) > 1


проще
11 авг 13, 15:04    [14693316]     Ответить | Цитировать Сообщить модератору
 Re: Поиск одинаковых записей в разных столбцах  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
select
 t1.*
from
 Таблица t1
where
 exists(select 1 from (values (t1.count1), (t1.count2), (t1.count3), (t1.count4)) x(c) where c <> 0 having count(distinct c) = 1 and count(*) > 1);
11 авг 13, 15:44    [14693402]     Ответить | Цитировать Сообщить модератору
 Re: Поиск одинаковых записей в разных столбцах  [new]
aleks2
Guest
with
d(city, count1, count2, count3, count4) as
(
select 'Moskow',                  1,           0   ,        1    ,      0 union all
select 'St.peterburg',           2,           0 ,          0    ,      0 union all
select 'Voronezh',                1,           3  ,         0    ,      0 union all
select 'Elsk',                         1 ,          1,           0    ,      1
)
select *
from d d1
 where exists (select * from d d2 
                 where d2.city <> d1.city
                    and ISNULL(nullif(d1.count1, 0), d2.count1) = ISNULL(nullif(d2.count1, 0), d1.count1)
                    and ISNULL(nullif(d1.count2, 0), d2.count2) = ISNULL(nullif(d2.count2, 0), d1.count2)
                    and ISNULL(nullif(d1.count3, 0), d2.count3) = ISNULL(nullif(d2.count3, 0), d1.count3)
                    and ISNULL(nullif(d1.count4, 0), d2.count4) = ISNULL(nullif(d2.count4, 0), d1.count4)
               )
11 авг 13, 16:00    [14693437]     Ответить | Цитировать Сообщить модератору
 Re: Поиск одинаковых записей в разных столбцах  [new]
Empirical
Member

Откуда:
Сообщений: 99
aleks2,

не совсем элегантное решение, но вроде работает

with
d(city, count1, count2, count3, count4) as
(
select 'Moskow',                  1,           0   ,        1    ,      0 union all
select 'St.peterburg',           2,           0 ,          0    ,      0 union all
select 'Voronezh',                1,           3  ,         0    ,      0 union all
select 'Elsk',                         1 ,          1,           0    ,      1
)
select city, nullif(count1,0), nullif(count2,0), nullif(count3,0), nullif(count4,0),
(count1+count2+count3+count4)/(4+
count1+count2+count3+count4-isnull(nullif(count1,0),1)-isnull(nullif(count2,0),1)-
isnull(nullif(count3,0),1)-isnull(nullif(count4,0),1)),
-(count1+count2+count3+count4-isnull(nullif(count1,0),1)-isnull(nullif(count2,0),1)-
isnull(nullif(count3,0),1)-isnull(nullif(count4,0),1))
from d d1
where -(count1+count2+count3+count4-isnull(nullif(count1,0),1)-isnull(nullif(count2,0),1)-
isnull(nullif(count3,0),1)-isnull(nullif(count4,0),1))<3 and
coalesce(count1,count2,count3,count4) = (count1+count2+count3+count4)/(4+
count1+count2+count3+count4-isnull(nullif(count1,0),1)-isnull(nullif(count2,0),1)-
isnull(nullif(count3,0),1)-isnull(nullif(count4,0),1))
11 авг 13, 17:04    [14693568]     Ответить | Цитировать Сообщить модератору
 Re: Поиск одинаковых записей в разных столбцах  [new]
Гость333
Member

Откуда:
Сообщений: 3683
boobonick
Moskow
St.peterburg

Вы бы, не знаю, иногда хоть в Гугл Транслейт заглядывали, что ли :-(
12 авг 13, 08:48    [14694774]     Ответить | Цитировать Сообщить модератору
 Re: Поиск одинаковых записей в разных столбцах  [new]
boobonick
Member [заблокирован]

Откуда:
Сообщений: 206
Сколько вариантов, спасибо.
12 авг 13, 19:56    [14698789]     Ответить | Цитировать Сообщить модератору
 Re: Поиск одинаковых записей в разных столбцах  [new]
boobonick
Member [заблокирован]

Откуда:
Сообщений: 206
Гость333
boobonick
Moskow
St.peterburg

Вы бы, не знаю, иногда хоть в Гугл Транслейт заглядывали, что ли :-(

Щас еще в расизме обвинят ;-) Ну буковку s пропустил
12 авг 13, 19:57    [14698792]     Ответить | Цитировать Сообщить модератору
 Re: Поиск одинаковых записей в разных столбцах  [new]
boobonick
Member [заблокирован]

Откуда:
Сообщений: 206
aleks2
with
d(city, count1, count2, count3, count4) as
(
select 'Moskow',                  1,           0   ,        1    ,      0 union all
select 'St.peterburg',           2,           0 ,          0    ,      0 union all
select 'Voronezh',                1,           3  ,         0    ,      0 union all
select 'Elsk',                         1 ,          1,           0    ,      1
)
select *
from d d1
 where exists (select * from d d2 
                 where d2.city <> d1.city
                    and ISNULL(nullif(d1.count1, 0), d2.count1) = ISNULL(nullif(d2.count1, 0), d1.count1)
                    and ISNULL(nullif(d1.count2, 0), d2.count2) = ISNULL(nullif(d2.count2, 0), d1.count2)
                    and ISNULL(nullif(d1.count3, 0), d2.count3) = ISNULL(nullif(d2.count3, 0), d1.count3)
                    and ISNULL(nullif(d1.count4, 0), d2.count4) = ISNULL(nullif(d2.count4, 0), d1.count4)
               )




А в чем смысл where d2.city <> d1.city?
13 авг 13, 12:43    [14701477]     Ответить | Цитировать Сообщить модератору
 Re: Поиск одинаковых записей в разных столбцах  [new]
капец полный
Guest
boobonick,

смысл в том, что если само с собой сравнивать, то вообще всегда будет полное совпадение,
по всем столбцам, т.е. в итоге будет всегда исходная таблица
13 авг 13, 12:54    [14701561]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить