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

Откуда: оттуда
Сообщений: 16
есть некий набор данных, получившийся в результате выполнения скрипта.
5 столбцов и данные
1 2 3 4 5
a x b x x
b x a x x
c x d x x
d x c x x

первые две строки - дубли.
третья и четвертая тоже.
как их исключить?
24 апр 13, 16:46    [14225677]     Ответить | Цитировать Сообщить модератору
 Re: Задачка  [new]
uniqueidentifier
Member

Откуда: оттуда
Сообщений: 16
т.е, чтобы осталось
1 2 3 4 5
a x b x x
c x d x x
24 апр 13, 16:48    [14225695]     Ответить | Цитировать Сообщить модератору
 Re: Задачка  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
а если будет
автор
xxdxc

ето тоже дубль к стьрокам 3 и 4 ?
24 апр 13, 16:48    [14225698]     Ответить | Цитировать Сообщить модератору
 Re: Задачка  [new]
Dima T
Member

Откуда:
Сообщений: 15017
Нормализовать сначала. или хотя бы отсортировать
a b x x x
a b x x x
c d x x x
c d x x x
24 апр 13, 16:49    [14225707]     Ответить | Цитировать Сообщить модератору
 Re: Задачка  [new]
gang
Member

Откуда:
Сообщений: 1394
Dima T,

Подскажите синтаксис для "сортировки" столбцов?
24 апр 13, 16:54    [14225759]     Ответить | Цитировать Сообщить модератору
 Re: Задачка  [new]
gang
Member

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

В приведенном Вами примере наверное проканает select ASCII (x)+ASCII (y)+ASCII (z) =)
Но сдается мне оригинальная задача сложнее...
24 апр 13, 16:58    [14225788]     Ответить | Цитировать Сообщить модератору
 Re: Задачка  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
в качестве идеи
select top 1 with ties g1, [2], g3, [3], [4], [5]
  from (select case when [1] > [3] then [1] else [3] end as g1
              ,[2]
              ,case when [1] > [3] then [3] else [1] end as g3
              ,[4], [5]
          from mytable) as t
 order by row_number() over(partition by g1, g3 order by [2], [4], [5])
дальше сами напильником допилите, не забудьте протестить на null-ы и т.п.
24 апр 13, 17:00    [14225808]     Ответить | Цитировать Сообщить модератору
 Re: Задачка  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Паганель,

а если ему надо не 1 и 3 стоблец сравнивать
24 апр 13, 17:03    [14225845]     Ответить | Цитировать Сообщить модератору
 Re: Задачка  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Maxx
Паганель,

а если ему надо не 1 и 3 стоблец сравнивать
а какой с каким? он пока не сказал
24 апр 13, 17:06    [14225856]     Ответить | Цитировать Сообщить модератору
 Re: Задачка  [new]
uniqueidentifier
Member

Откуда: оттуда
Сообщений: 16
Уточнения :)
a, b, c, d - это некие значения, допустим, varchar
Вот так примерно выглядят данные:
1 2 3 4 5
a x1 b x2 x3
b x1 a x2 x3

x1 в первой строке = x1 во второй
x2 в первой строке = x2 во второй
x3 в первой строке = x3 во второй
x4 в первой строке = x4 во второй

т.е, нужно убрать одну из строк, содержащих а и b, с и d, и т.д., так как фактически это дубли.
24 апр 13, 17:14    [14225919]     Ответить | Цитировать Сообщить модератору
 Re: Задачка  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
Может, надо считать дублями строки с одинаковым количеством одинаковых символов?
24 апр 13, 17:14    [14225920]     Ответить | Цитировать Сообщить модератору
 Re: Задачка  [new]
uniqueidentifier
Member

Откуда: оттуда
Сообщений: 16
a, b,c, d можно считать int'ом
24 апр 13, 17:17    [14225955]     Ответить | Цитировать Сообщить модератору
 Re: Задачка  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
uniqueidentifier
x1 в первой строке = x1 во второй
x2 в первой строке = x2 во второй
x3 в первой строке = x3 во второй
x4 в первой строке = x4 во второй


забавный у вас тип int однако
24 апр 13, 17:18    [14225967]     Ответить | Цитировать Сообщить модератору
 Re: Задачка  [new]
Dima T
Member

Откуда:
Сообщений: 15017
gang
Dima T,

Подскажите синтаксис для "сортировки" столбцов?

Не подскажу. Думаю проще всего заранее это сделать тем же скриптом который эту чудо-табличку выдает.
24 апр 13, 17:19    [14225977]     Ответить | Цитировать Сообщить модератору
 Re: Задачка  [new]
qwerty112
Guest
uniqueidentifier
Уточнения :)
a, b, c, d - это некие значения, допустим, varchar
Вот так примерно выглядят данные:
1 2 3 4 5
a x1 b x2 x3
b x1 a x2 x3

x1 в первой строке = x1 во второй
x2 в первой строке = x2 во второй
x3 в первой строке = x3 во второй
x4 в первой строке = x4 во второй

т.е, нужно убрать одну из строк, содержащих а и b, с и d, и т.д., так как фактически это дубли.

внёс, один, "ясность"

на этот вопрос ответь - 14225698
24 апр 13, 17:23    [14226003]     Ответить | Цитировать Сообщить модератору
 Re: Задачка  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3618
чексам применить и всё
24 апр 13, 17:23    [14226011]     Ответить | Цитировать Сообщить модератору
 Re: Задачка  [new]
uniqueidentifier
Member

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

Такая ситуевина невозможна :)
Только в столбцах 1 и 3 такое может быть.
24 апр 13, 17:25    [14226024]     Ответить | Цитировать Сообщить модератору
 Re: Задачка  [new]
invm
Member

Откуда: Москва
Сообщений: 9405
declare @t table (f1 int, f2 int, f3 int, f4 int, f5 int);

insert into @t
values
(1, 0, 2, 0, 0),
(2, 0, 1, 0, 0),
(3, 0, 4, 0, 0),
(4, 0, 3, 0, 0);

select
 t.*
from
 @t t cross apply
 (select f1 union all select f3) x(v)
where
 t.f1 < x.v
24 апр 13, 17:27    [14226039]     Ответить | Цитировать Сообщить модератору
 Re: Задачка  [new]
uniqueidentifier
Member

Откуда: оттуда
Сообщений: 16
Хехе.

Вот что работает:
select * from table
where столбец1 > столбец3

они ж интовые :)
24 апр 13, 17:30    [14226066]     Ответить | Цитировать Сообщить модератору
 Re: Задачка  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
declare @t table (f1 int, f2 int, f3 int, f4 int, f5 int);

insert into @t
values
(1, 0, 2, 0, 0),
(2, 0, 1, 0, 0),
(3, 0, 4, 0, 0),
(4, 0, 3, 0, 0);


select distinct case when f1 < f3 then f1 else f3 end as f1, f2, case when f1 < f3 then f3 else f1 end as f3, f4, f5 from @t
24 апр 13, 17:31    [14226075]     Ответить | Цитировать Сообщить модератору
 Re: Задачка  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
uniqueidentifier
Хехе.

Вот что работает:
select * from table
where столбец1 > столбец3

они ж интовые :)


declare @t table (f1 int, f2 int, f3 int, f4 int, f5 int);

insert into @t
values
(1, 0, 2, 0, 0),
(3, 0, 4, 0, 0),
(4, 0, 3, 0, 0);

и даже так? :)
24 апр 13, 17:32    [14226082]     Ответить | Цитировать Сообщить модератору
 Re: Задачка  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
uniqueidentifier
Хехе.

Вот что работает:
select * from table
where столбец1 > столбец3

они ж интовые :)
insert into @t
values
--(1, 0, 2, 0, 0),
(2, 0, 1, 0, 0),
(3, 0, 4, 0, 0),
(4, 0, 3, 0, 0);
24 апр 13, 17:32    [14226083]     Ответить | Цитировать Сообщить модератору
 Re: Задачка  [new]
uniqueidentifier
Member

Откуда: оттуда
Сообщений: 16
Алексей2003,

Ну, моя вина. Недообъяснил.
Может быть только дубль. Требля быть не может.
24 апр 13, 17:35    [14226106]     Ответить | Цитировать Сообщить модератору
 Re: Задачка  [new]
gang
Member

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

Если совместить предложенный мной и Ivan Durak вариант, то кое-что получается
declare @t table (x varchar(3), y int, z varchar(3) )
insert @t select 'a','1','b'
insert @t select 'b','1','a'
insert @t select '1','1','a'
insert @t select 'a','1','1'
--select ASCII (x)+ASCII (y)+ASCII (z) from @t
select checksum(x)+checksum(y)+checksum(z) from @t

И с дублями и с триблями и прочими *блями должно работать (с поправкой на точность checksum/HashBytes)
24 апр 13, 17:39    [14226140]     Ответить | Цитировать Сообщить модератору
 Re: Задачка  [new]
uniqueidentifier
Member

Откуда: оттуда
Сообщений: 16
Принято. Респект.
24 апр 13, 17:41    [14226164]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить