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

Откуда:
Сообщений: 15
Здравствуйте, при помощи 1 скрипта который в зависимости от суммы колонки(дело в том что были повторяющийся аккаунты и надо было суммировать значения из этой колонки) Points сделал TOP 20.
В чём состоит вопрос: я хочу изменить в другой таблице в зависимость от номера в этом TOP-е, скажем если у него 2-ое(или другое) место чтобы он получил в 2-ой таблице в его поле с колонки "Credits" +20 (пример). Возможно это реализовать ?
пример таблицы(уже с созданным топом-запросом select):
table1
Account | Points
1 Vasea 15
2 Vanea 14
3 Kristina 13

table2
Account | Credits
1 Kristina 500
2 Vasea 400
3 Vanea 300

Спасибо.
10 июл 14, 17:24    [16288470]     Ответить | Цитировать Сообщить модератору
 Re: Изменить/выбрать определённое значение в зависимости от "TOP"  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
классно,надеюсь вы из своего описание сами хоть что-то поняли ?
10 июл 14, 17:44    [16288601]     Ответить | Цитировать Сообщить модератору
 Re: Изменить/выбрать определённое значение в зависимости от "TOP"  [new]
Nike555
Member

Откуда:
Сообщений: 15
По пытался объяснить по длиннее чтобы не получилось слишком мало информации...

У меня к примеру 2 табеля:
table1
Account | column1 | column2 | Points

table2
Account | Credits
Kristina 500
Vasea 400
Vanea 300

Через запрос в SQL:
select Top 50 Account, sum(Point) as sumz
from table1
group by Account
order by SUM(Point) desc


Я получил топ в зависимости от Points в табеле "table1"
Теперь мне надо при помощи определённого запроса (если есть) выдать в table2 в колонке "Credits" например аккаунту который в этом топ-е на 2-ом месте чтобы он получил +20 (credits).
Надеюсь я сейчас немного понятнее объяснил :)
10 июл 14, 18:06    [16288712]     Ответить | Цитировать Сообщить модератору
 Re: Изменить/выбрать определённое значение в зависимости от "TOP"  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
Nike555
Надеюсь я сейчас немного понятнее объяснил :)

тоже ничего не понял...какие 20? при чём тут ТОП?

лучше напишите пример, что ЕСТЬ (тестовые данные) и что НАДО (результирующее множество)
10 июл 14, 20:16    [16289130]     Ответить | Цитировать Сообщить модератору
 Re: Изменить/выбрать определённое значение в зависимости от "TOP"  [new]
invm
Member

Откуда: Москва
Сообщений: 9838
declare @table1 table (Account varchar(30), Points int)
insert into @table1
values
('Vasea', 15),
('Vanea',  14),
('Kristina',  13);

declare @table2 table (Account varchar(30), Credits int)
insert into @table2
values
('Vasea', 400),
('Vanea',  300),
('Kristina',  500);

with x as
(
 select top (20)
  Account, sum(Points) as PointsSum,
  row_number() over (order by sum(Points) desc) as rn
 from
  @table1
 group by
  Account
 order by
  sum(Points) desc
)
select
 t.Account, t.Credits + case when x.rn = 2 then 20 else 0 end
from
 @table2 t left join
 x on x.Account = t.Account;
?
10 июл 14, 21:49    [16289352]     Ответить | Цитировать Сообщить модератору
 Re: Изменить/выбрать определённое значение в зависимости от "TOP"  [new]
Nike555
Member

Откуда:
Сообщений: 15
Спасибо большое invm. как я посмотрел(если понял правильно) твой скрипт, это вроде именно то что я искал :)
Но всё таки была моя ошибка, в том что не сказал сразу задачу скрипта (усложнённую) так как думал я сам смогу реализовать, но не получилось...
Вот именно сообтвенно необходимое задача для скрипта:
Есть эти 2 табеля - они находятся в 2 разных БД:
1-ый табель(база - events): EVENT1
http://prntscr.com/41c4a0
2-ой табель(база - server): members
http://prntscr.com/41c6y5

И скриптом(из 1-ого табеля):
select Top 50 AccountID, sum(Point) as sumz
from EVENT1
group by AccountID
order by SUM(Point) desc


я сделал топ в зависимости от поинтов (даже в скрине видно что есть повторяющийся аккаунты, по этому поинты были суммированы).
И я хочу чтобы топ 1 например прибавлялось +100 (в колонке "credits") в 2-ом табеле -соответствие с аккаунтом (колонка с аккаунтами в этом табеле "memb___id").
А потом топ 2 прибавлялось +90 (в колонке "credits")
А потом топ 3,4 ...(для каждого место в топ-е разное количество credits прибавлялось) и так далее, дальше уже сам буду писать отдельно для каждого из учасника топ-а.

Спасибо большое заранее, и простите что затянул так, я думал что смогу сам разобраться и изменить скрипт под собой, но, я только учусь...
10 июл 14, 23:19    [16289575]     Ответить | Цитировать Сообщить модератору
 Re: Изменить/выбрать определённое значение в зависимости от "TOP"  [new]
Nike555
Member

Откуда:
Сообщений: 15
USE events
declare @EVENT1 table (AccountID varchar(30), Points int)
insert into @EVENT1
values
('Vasea', 15),
('Vanea',  14),
('Kristina',  13);

USE server
declare @members table (memb___id varchar(30), Credits int)
insert into @members
values
('Vasea', 400),
('Vanea',  300),
('Kristina',  500);

with x as
(
USE events
 select top (20)
  AccountID, sum(Points) as PointsSum,
  row_number() over (order by sum(Points) desc) as rn
 from
  @EVENT1
 group by
  AccountID
 order by
  sum(Points) desc
)
select
USE server
 t.memb___id, t.Credits + case when x.rn = 2 then 20 else 0 end
from
 @members t left join
 x on x.AccountID = t.memb___id;


Вот изменил скрипт под себя, но вот некоторые вещи не могу понять,
1) верно то что я тут написал? Просто никогда не использовал 1 скрипт с использованием 2-ых баз(даже не знаю возможно ли это или нет...)
2) возможно ли использовать скрипт без http://prntscr.com/41rrpp ? Я то что написал в сообщениях был только пример что находиться в самих табелях, но там строк намного больше...
3) Как вы думайте будет работать нормально этот топ? http://prntscr.com/41rtig вить он как бы находятся в другой базе...

Спасибо
12 июл 14, 03:24    [16295026]     Ответить | Цитировать Сообщить модератору
 Re: Изменить/выбрать определённое значение в зависимости от "TOP"  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8879
Блдь, это было круто... :-o
-------------------------
Касательно имени таблицы:

select t1.*, t2.field3
  from BASENAME.dbo.Table1 as t1
         ,OTHERBASE.dbo.Table2 as t2 
  where t1.field1 = t2.field1 
      and t1.field3 = t2.field4
13 июл 14, 22:27    [16298664]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить