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

Откуда:
Сообщений: 299
Добрый день

Есть таблица table1 c полем Col1 Col2 и Value. Надо найти сумму следующих произведений
сумма(Value (where col1=1)* Value (where col1=2)) group by col2

Надеюсь понятно что я имел ввиду

не подскажете как это запросом сделать?
17 июл 12, 10:57    [12876371]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
_ч_
Member

Откуда:
Сообщений: 1440
Che0
Надеюсь понятно что я имел ввиду


Тестовые данные приведите. Записи из таблиц и желаемый результат.
17 июл 12, 11:10    [12876484]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
iap
Member

Откуда: Москва
Сообщений: 47085
Che0,

SUM(CASE * CASE) не помогает, да?
17 июл 12, 11:16    [12876537]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
iap
Member

Откуда: Москва
Сообщений: 47085
iap
Che0,

SUM(CASE * CASE) не помогает, да?
Хотя, и правда, непонятно, что надо получить
17 июл 12, 11:18    [12876545]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
Гузы
Guest
Che0,
select count(*)*2 from table where col1=1 and col2=2

Каков вопрос...
17 июл 12, 11:18    [12876546]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
Che0
Member

Откуда:
Сообщений: 299
RowID                Scenario_MemberId    Time_Month           Счет_MemberId        Value
-------------------- -------------------- -------------------- -------------------- ----------------------
16539 1 201101 5003 20
16540 2 201101 5004 30
16538 2 201101 5002 20
16579 1 201102 5002 20
16542 1 201102 5004 30
16580 2 201102 5003 20

Надо получить следующее Value(rowID=16539)*Value(rowID=16580)+Value(RowID=16540)*Value(ROwID=16542)+Value(rowID=16538)*Value(RowID=16579)

т.е разделить по группам записи с одним счет_memberID, далее перемножить записи с Scenario_MemberId=1 и Scenario_MemberId=2 и прибавить результат к общей сумме и так по всем записям
17 июл 12, 11:26    [12876598]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
_ч_
Member

Откуда:
Сообщений: 1440
Che0
RowID                Scenario_MemberId    Time_Month           Счет_MemberId        Value
-------------------- -------------------- -------------------- -------------------- ----------------------
16539 1 201101 5003 20
16540 2 201101 5004 30
16538 2 201101 5002 20
16579 1 201102 5002 20
16542 1 201102 5004 30
16580 2 201102 5003 20

Надо получить следующее Value(rowID=16539)*Value(rowID=16580)+Value(RowID=16540)*Value(ROwID=16542)+Value(rowID=16538)*Value(RowID=16579)

т.е разделить по группам записи с одним счет_memberID, далее перемножить записи с Scenario_MemberId=1 и Scenario_MemberId=2 и прибавить результат к общей сумме и так по всем записям


Судя по всему что-то такое:
select PartOne.Value*PartTwo.Value from(select * from @table1 
where Scenario_MemberId = 1)PartOne
inner join(
select * from @table1 
where Scenario_MemberId = 2)PartTwo on PartOne.Счет_MemberId = PartTwo.Счет_MemberId 
17 июл 12, 11:38    [12876669]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
Che0
Member

Откуда:
Сообщений: 299
Прошу прощение за такую нечеткую постановку вопроса в начале. сейчас вроде норм
17 июл 12, 11:39    [12876678]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
AmKad
Member

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

with s (rowid, scenario_memberid, time_month, счет_memberid, value) as (
select 16539, 1, 201101, 5003, 20 union all
select 16540, 2, 201101, 5004, 30 union all
select 16538, 2, 201101, 5002, 20 union all
select 16579, 1, 201102, 5002, 20 union all
select 16542, 1, 201102, 5004, 30 union all
select 16580, 2, 201102, 5003, 20)
select sum(v1 * v2) sm
from
 (select 
  max(case when scenario_memberid = 1 then value end) v1,
  max(case when scenario_memberid = 2 then value end) v2
  from s
  group by счет_memberid
 )s;

sm          
----------- 
1700  
17 июл 12, 11:44    [12876713]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
Che0
Member

Откуда:
Сообщений: 299
А если надо поставить ограничение по времени where=201101? не понимаю где его прописать
17 июл 12, 11:44    [12876716]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить