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

Откуда:
Сообщений: 41
Добрый вечер,

Есть таблица которая выглядит таким образом:
В первых двух колонках есть повторяющиеся значения.


a b c d e
---- ---- --- --- ---
000 111 12 2 6
222 555 12 6 9
000 111 10 8 3
000 111 1 0 1
222 555 50 2 0
222 555 9 3 5

Нужно построить запрос таким образом чтобы они не показывались больше одного раза и получить сумму последних двух колонок
Т.е чтобы получилось так


000 111 12 2 6
10 8 3
1 0 1
222 555 50 2 0
9 3 5
12 6 9

Summa 21 24

Помогите пожалуйста построить такой селект. Заранее благодарен за все советы и помощь
1 мар 12, 19:51    [12179431]     Ответить | Цитировать Сообщить модератору
 Re: Не показывать в результате запроса одинаковые значения двух полей  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
anta-res
Помогите пожалуйста построить такой селект.


Форматирование (и подведение итогов), это удел клиентского приложения.
1 мар 12, 20:22    [12179523]     Ответить | Цитировать Сообщить модератору
 Re: Не показывать в результате запроса одинаковые значения двух полей  [new]
anta-res
Member

Откуда:
Сообщений: 41
Форматирование (и подведение итогов), это удел клиентского приложения.

спасибо за совет.
К сожалению такой возможности нет.

А без суммирования просто построить селект чтобы из первой таблицы получался результат как во второй возможно сделать?
Как нибудь с PARTITION BY или нужно колдовать с темп таблицами?
Заранее благодарю за помощь. Правда очень нужно.


a b c d e
---- ---- --- --- ---
000 111 12 2 6
222 555 12 6 9
000 111 10 8 3
000 111 1 0 1
222 555 50 2 0
222 555 9 3 5


a b c d e
---- ---- --- --- ---
000 111 12 2 6
10 8 3
1 0 1
222 555 50 2 0
9 3 5
12 6 9
5 мар 12, 20:00    [12199390]     Ответить | Цитировать Сообщить модератору
 Re: Не показывать в результате запроса одинаковые значения двух полей  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
anta-res
Форматирование (и подведение итогов), это удел клиентского приложения.

спасибо за совет.
К сожалению такой возможности нет.


Вы не поняли, господин pkarklin не совет вам давал, а сообщил непреложную аксиому: SQL Server НЕ ЗАНИМАЕТСЯ форматированием. Точка. Возможность у вас может быть, может не быть - аксиоме пофиг.

anta-res
Заранее благодарю за помощь. Правда очень нужно.

Еще раз: то что вы показываете как желательный результат есть чистой воды форматирование. По его поводу - см. выше. Сервер возвращает вам прямоугольный резалт-сет в каждой ячейке которого что-нибудь - да есть. А вот уж клиент... Ну вы поняли.
5 мар 12, 20:35    [12199527]     Ответить | Цитировать Сообщить модератору
 Re: Не показывать в результате запроса одинаковые значения двух полей  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
anta-res, можно (но не нужно) извернуться... Нумеруете в разрезе а и б выборку, опосля чего для любого а или б, где номер строки более чем 1 - возвращать пустую строку. Очевидно что при этом а и б становятся текстовыми полями. Но это извращение, о чем вам и говорят. Если еще и итоги присобачить... То тогда "ц" тоже текстовое и юнион в помощь))).
5 мар 12, 21:01    [12199623]     Ответить | Цитировать Сообщить модератору
 Re: Не показывать в результате запроса одинаковые значения двух полей  [new]
anta-res
Member

Откуда:
Сообщений: 41
kDnZP
спасибо
5 мар 12, 21:32    [12199767]     Ответить | Цитировать Сообщить модератору
 Re: Не показывать в результате запроса одинаковые значения двух полей  [new]
smallserg
Member

Откуда:
Сообщений: 82
anta-res,
declare @t table (i int, j int)
insert into @t (i,j) values (1,2)
insert into @t (i,j) values (1,3)
insert into @t (i,j) values (1,4)
insert into @t (i,j) values (2,1)
insert into @t (i,j) values (2,2)
insert into @t (i,j) values (2,3)
select z,j from
(select * from (
select case when isnull(c.i,0)=0 then cast(d.i as varchar(10)) else '' end z,
d.j,1 p,d.rn,d.zs
  from
(select w.i,w.j,row_number() over (partition by w.i order by w.j) rn,
dense_rank() over (order by w.i ) zs
 from @t w) d
left join
(select i,j,row_number() over (partition by i order by j) rn2 from @t) c
on d.i=c.i and d.rn=c.rn2+1) a 
union select distinct 'summa',sum(h.j) over () mmm,2,0,10000000 
 from @t h 
) ff order by zs,p,z desc


вариант посложнее :
 declare @t table (i int, j int)
insert into @t (i,j) values (1,2)
insert into @t (i,j) values (1,3)
insert into @t (i,j) values (1,4)
insert into @t (i,j) values (2,1)
insert into @t (i,j) values (2,2)
insert into @t (i,j) values (2,3)
select z,j from
(select * from (
select case when isnull(c.i,0)=0 then cast(d.i as varchar(10)) else '' end z,
d.j,1 p,d.rn,d.zs
  from
(select w.i,w.j,row_number() over (partition by w.i order by w.j) rn,
dense_rank() over (order by w.i ) zs
 from @t w) d
left join
(select i,j,row_number() over (partition by i order by j) rn2 from @t) c
on d.i=c.i and d.rn=c.rn2+1) a 

union select 'summa',mmm,2,0,row_number() over (order by kkk.sm) from
(select distinct sum(h.j) over (partition by h.i ) mmm,h.i sm
 from @t h ) kkk
) ff order by zs,p,z desc
6 мар 12, 18:17    [12205913]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить