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

Откуда: Екатеринбург
Сообщений: 17724
убрать повторы в столбце (столбцах)
(заменить на null, "", пробел ...)

К сообщению приложен файл. Размер - 0Kb
17 ноя 09, 09:53    [7937417]     Ответить | Цитировать Сообщить модератору
 Re: Как это можно сделать?  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Если Вы выводите отчет на экран посредством какого-либо Report Engine,
попробуйте возложить эту работу на него
Возможно, у него есть такая возможность
Насколько я помню, у Crystal Reports точно есть (только не помню как называется)
17 ноя 09, 09:57    [7937439]     Ответить | Цитировать Сообщить модератору
 Re: Как это можно сделать?  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Какая версия сервера? Что определяет порядок строк?
Что мешает оформить вопрос как положено?
17 ноя 09, 09:58    [7937440]     Ответить | Цитировать Сообщить модератору
 Re: Как это можно сделать?  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 17724
прошу прощения, за не полную инфу
sql2005
нужно для access (ленточная форма)
пользоваться инструментом типа Crystal Reports не подходит.
хотся получить результат только возможностями сервера
17 ноя 09, 10:03    [7937472]     Ответить | Цитировать Сообщить модератору
 Re: Как это можно сделать?  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
если правильно понял...
declare @t table (cod1 int, cod2 varchar(10))

insert @t
select 1, 'a'
union all
select 1, 'b'
union all
select 1, 'c'
union all
select 2, 'd'
union all
select 2, 'f'
union all
select 2, 'g'

select
        t.cod1
        ,case when row_number() over(partition by t.cod1 order by t.cod2)=1 then t.cod1 else null end
        ,t.cod2
    from
        @t t
--------------------------------------------------------------
Дьявол кроется в деталях.
17 ноя 09, 10:05    [7937482]     Ответить | Цитировать Сообщить модератору
 Re: Как это можно сделать?  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 17724
порядок строк определяет (в данном случае) 1 столбец (в общем случае присутствует сортировка и по другим столлбцам )
17 ноя 09, 10:05    [7937487]     Ответить | Цитировать Сообщить модератору
 Re: Как это можно сделать?  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 17724
2Дедушка
нечто подобное.
только вместо 1,2,... могут быть любые значения (текст, дата...) (цифры как частный случай)
17 ноя 09, 10:11    [7937524]     Ответить | Цитировать Сообщить модератору
 Re: Как это можно сделать?  [new]
Taffy
Member

Откуда:
Сообщений: 20498
вадя,

а вы код-то от Дедушки запустите
у него про 1 и 2 ничего там не написано, однако
17 ноя 09, 10:15    [7937544]     Ответить | Цитировать Сообщить модератору
 Re: Как это можно сделать?  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 17724
2Дедушка
ага, всё подошло
идея понятна
17 ноя 09, 10:16    [7937550]     Ответить | Цитировать Сообщить модератору
 Re: Как это можно сделать?  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 17724
дык я и запустил.

declare @t table (cod1 varchar(10), cod2 varchar(10))

insert @t
select 'ww', 'a'
union all
select 'ww', 'b'
union all
select 'ww', 'c'
union all
select 'dd', 'd'
union all
select 'dd', 'f'
union all
select 'dd', 'g'

select
       
        case when row_number() over(partition by t.cod1 order by t.cod2)=1 then t.cod1 else null end as rr
        ,t.cod2
    from
        @t t
17 ноя 09, 10:17    [7937559]     Ответить | Цитировать Сообщить модератору
 Re: Как это можно сделать?  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
select
        case
            when row_number() over(partition by t.cod1 order by t.cod2)=1 then dense_rank() over(order by t.cod1)
            else null
        end as rr
        ,t.cod2
    from
        @t t
--------------------------------------------------------------
Дьявол кроется в деталях.
17 ноя 09, 10:27    [7937615]     Ответить | Цитировать Сообщить модератору
 Re: Как это можно сделать?  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 17724
а вот этого я не понял

select
        case
            when row_number() over(partition by t.cod1 order by t.cod2)=1 then dense_rank() over(order by t.cod1)
            else null
        end as rr
        ,t.cod2
    from
        @t t

в чем преимущество?


вариан :
select
        case when row_number() over(partition by t.cod1 order by t.cod2)=1 then t.cod1 else null end as rr
        ,t.cod2
    from
        @t t

позволяет заменить null на любое значение, что может быть полезно в некоторых случаях
17 ноя 09, 10:58    [7937843]     Ответить | Цитировать Сообщить модератору
 Re: Как это можно сделать?  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
вадя
а вот этого я не понял...

вот, знаете ли я тоже.
у нас с вами получается разговор Штирлица с Шеленбергом :)
Вам, что нужно то в итоге получить?
17 ноя 09, 11:01    [7937858]     Ответить | Цитировать Сообщить модератору
 Re: Как это можно сделать?  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 17724
первоначальный вариан меня устраивает(с моими доработками)
а вот про твой последний - хочется узнать по-больше.
в чем его преимущество
недостаток (под мою задачу) я нашёл.., но мож я чего не догоняю...
17 ноя 09, 11:07    [7937918]     Ответить | Цитировать Сообщить модератору
 Re: Как это можно сделать?  [new]
Taffy
Member

Откуда:
Сообщений: 20498
вадя,

первый вариант выдает значение группировочного поля (только в одной строке)
второй вариант - выдает нумерацию групп (только в одной строке), а не значение группы

все ведь написано ;)
17 ноя 09, 11:38    [7938254]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить