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

Откуда:
Сообщений: 1197
Привет.

Есть 3 таблицы: ДатыПродаж, Продажи и Магазины.

Кол-во по продажам надо показывать понедельно по каждому магазину. Причем показывать надо по каждой неделе и по каждому магазину, независимо от того были ли продажи у данного магазина на этой неделе.
Сделал вот такой скрипт, но что то не дружат мои джойны

DECLARE @tmpWeekDates TABLE
(
	WeekNumber NVARCHAR(10),
	SaleDate NCHAR(8)
)

DECLARE @retailerStores TABLE 
(
	RetailerName NVARCHAR(200),
	RetailerCode NVARCHAR(20),
	StoreName NVARCHAR(200),
	StoreCode NVARCHAR(20)
)

--1. stores with retailers
INSERT @retailerStores(RetailerName,RetailerCode,StoreName,StoreCode)
SELECT [RetailerCode],[RetailerName],[StoreCode],[StoreName]
  FROM [test].[dbo].[Stores]
  

--2.weeks with dates
INSERT @tmpWeekDates(WeekNumber,SaleDate)
SELECT  [Week],[SaleDate]
  FROM [test].[dbo].[Weeks]


SELECT   ISNULL(SUM(s.Price), 0),
		 ISNULL(AVG(s.Price), 0),
		 ISNULL(COUNT(*), 0),
		 ISNULL(ISNULL(SUM(s.Price), 0) / ISNULL(COUNT(*), 0), 0),
		 ISNULL(SUM(s.Price), 0),
		 d.WeekNumber,
		 rs.StoreName
	FROM @retailerStores  rs  --show for all stores
		LEFT JOIN [dbo].[Sales] s
		    ON rs.StoreName = s.StoreCode		
		RIGHT JOIN @tmpWeekDates d  --dates show always regarding "exists sales or not"
			ON s.SaleDate = d.SaleDate
	GROUP BY rs.StoreName, d.WeekNumber
	ORDER BY d.WeekNumber
29 окт 12, 22:47    [13393766]     Ответить | Цитировать Сообщить модератору
 Re: склеить данные из 3 таблиц  [new]
Vladimir A
Member

Откуда:
Сообщений: 93
деление на ноль ?
ISNULL(ISNULL(SUM(s.Price), 0) / ISNULL(COUNT(*), 0), 0),
29 окт 12, 23:17    [13393895]     Ответить | Цитировать Сообщить модератору
 Re: склеить данные из 3 таблиц  [new]
Alexander Titkin
Member

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

select
	isnull(sum(s.Price), 0)
	, isnull(avg(s.Price), 0)
	, isnull(count(*), 0)
	, isnull(isnull(sum(s.Price), 0) / isnull(count(*), 0), 0)
	, isnull(sum(s.Price), 0)
	, d.WeekNumber
	, rs.StoreName
from @retailerStores  rs  --show for all stores
	cross join @tmpWeekDates d  --dates show always regarding "exists sales or not"
	left join [dbo].[Sales] s on rs.StoreName = s.StoreCode and s.SaleDate = d.SaleDate
group by rs.StoreName
	, d.WeekNumber
order by d.WeekNumber


Я тронул только соединения таблиц, за остальное смотрите сами. Поля без алиасов, деление на ноль и т.п.
30 окт 12, 00:07    [13394026]     Ответить | Цитировать Сообщить модератору
 Re: склеить данные из 3 таблиц  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Alexander Titkin,

и что, меняете NULL на 0 в знаменателе, и это Вам кажется правильным?
Используйте лучше NULLIF
30 окт 12, 09:30    [13394684]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить