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

Откуда:
Сообщений: 166
MSSQL 2008r2 Dev. Ed.

Есть таблица продуктов:

CREATE TABLE dbo.Products
    (productid int,
     brand varchar (20),
     group varchar (25),
     productname varchar (50) );


Есть таблица регионов:

CREATE TABLE dbo.Products
    (regionid int,
     regionname varchar (20),
     );


Таблица продаж:

CREATE TABLE dbo.Sales
    (regionid int,
     productid int,
     date datetime,
     dollars money,  
     );


И таблица с целями по продажам на месяц:

CREATE TABLE dbo.Targets
    (regionid int,
     productid int,
     date datetime,
     target money,  
     );


Но суть в том, что цель на все brand или group или region сразу, не равна сумме всех целей на количество brand,group или region.
По этому в таблице целей присутствует понятие All.
Но такого понятия нет не в таблице Products, Regions или Sales.

А необходимо написать подобный запрос

SELECT t.target,ss.dollars,ss.regionname,ss.productname,ss.brand,ss.group 
 FROM 
 (SELECT dollars,regionname,productname,brand,group,regionid,productid,date  dbo.Sales s LEFT JOIN sbo.Products p 
     ON s.Productid = p.Productid
                          LEFT JOIN sbo.Regions r
     ON s.RegionID = r.RegionID) ss
 LEFT JOIN  dbo.Target t
 ON ss.productid = t.productid
 AND ss.regionid = t.regionid
 AND ss.date = t. date


Но так чтобы при выборе Регона - ALL или Бренда - ALL выводилась не средняя цель, а цель соответсующая этим значениям ALL.
Зачем это нужно... пользователь будет работать с запрос из PivotTable, а сводная таблица и так имеет свой пересчет в фильтрах и понятие ALL(все бренды или все регионы) и будет просто считать среднее значение.
Подскажите, если кто то понял о чем я тут...
6 июн 12, 00:00    [12671643]     Ответить | Цитировать Сообщить модератору
 Re: Помощ в написании запроса.  [new]
SunJun
Member

Откуда:
Сообщений: 135
case when column_name = 'All' then (select ....) else (select....) end
6 июн 12, 09:35    [12672216]     Ответить | Цитировать Сообщить модератору
 Re: Помощ в написании запроса.  [new]
zanderman
Member

Откуда:
Сообщений: 166
SunJun
case when column_name = 'All' then (select ....) else (select....) end


Как вариант, но если исходный набор целей такой:


ThedateBrandGroupRegionTarget
20.06.2012ActimelActimelAll100
20.06.2012ActiviaActivia 125All200
20.06.2012ActimelAllAll1000
20.06.2012AllAllAll20000
25.06.2012ActimelActimelAll150
25.06.2012ActiviaActivia 125All250
25.06.2012ActimelAllAll1500
25.06.2012AllAllAll21000


То для каждого варианта, где присутствует All, надо прописывать оценку CASE...
Мне кажется это через чур затратно
6 июн 12, 10:59    [12672780]     Ответить | Цитировать Сообщить модератору
 Re: Помощ в написании запроса.  [new]
SunJun
Member

Откуда:
Сообщений: 135
прекрасно, у нас есть изначальное таблица.еще надо 2 таблиц результатов, чтоб результат был ясным .после подумаем как создать оптимальный query.
6 июн 12, 11:09    [12672877]     Ответить | Цитировать Сообщить модератору
 Re: Помощ в написании запроса.  [new]
zanderman
Member

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

Не понял...переформулировать?
6 июн 12, 11:44    [12673242]     Ответить | Цитировать Сообщить модератору
 Re: Помощ в написании запроса.  [new]
SunJun
Member

Откуда:
Сообщений: 135
т.е есть например есть такие данные, если в таблице column.value = 'All' результат должен быть таким а если нет то таким. Не в словах опишите а примерно так как вы описали "исходный набор целей"
6 июн 12, 13:17    [12674022]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить