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

Откуда:
Сообщений: 41
SELECT ITEMS.CODE [Kod], ITEMS.NAME [Name], ITEMS.CYPHCODE [Firma],

SUM(CASE WHEN MONTH(STLINE.DATE_)= MONTH(GETDATE())-1 AND STLINE.CLIENTREF IN (376) THEN
CASE STLINE.TRCODE WHEN 8 THEN 1 WHEN 3 THEN -1 ELSE 0 END * STLINE.AMOUNT END) [Last Month Sales],

SUM(CASE WHEN MONTH(STLINE.DATE_)>= MONTH(GETDATE())-3  AND STLINE.CLIENTREF IN (376) THEN
CASE STLINE.TRCODE WHEN 8 THEN 1 WHEN 3 THEN -1 ELSE 0 END * STLINE.AMOUNT END)  [For 3 Month Sales],

SUM(CASE WHEN MONTH(STLINE.DATE_)>= MONTH(GETDATE())-6  AND STLINE.CLIENTREF IN (376) THEN
CASE STLINE.TRCODE WHEN 8 THEN 1 WHEN 3 THEN -1 ELSE 0 END * STLINE.AMOUNT END)  [For 6 Month Sales],

INV.MINLEVEL [MIN Stock], INV.MAXLEVEL [MAX Stock]

FROM LG_XXX_ITEMS AS ITEMS INNER JOIN LG_XXX_01_STLINE AS STLINE ON  ITEMS.LOGICALREF=STLINE.STOCKREF  INNER JOIN  LG_XXX_INVDEF AS INV ON  STLINE.STOCKREF=INV.ITEMREF  AND INV.INVENNO='0'
WHERE  ITEMS.CYPHCODE='Genius' 
GROUP BY  ITEMS.CODE, ITEMS.NAME, ITEMS.CYPHCODE,INV.MINLEVEL, INV.MAXLEVEL
ORDER BY  ITEMS.CODE
Уважаемые форумчане хотелось бы в этом запросе добавить еще и сток товаров: LG_XXX_GNTOT- База, ONHAND -Столбец, связь с другими базами LG_XXX_GNTOT.STOCKREF

Сообщение было отредактировано: 13 сен 11, 09:52
13 сен 11, 09:05    [11267092]     Ответить | Цитировать Сообщить модератору
 Re: Связь между 3-мя базами  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31959
Rovshan1975
Уважаемые форумчане хотелось бы в этом запросе добавить еще и сток товаров: LG_XXX_GNTOT- База, ONHAND -Столбец, связь с другими базами LG_XXX_GNTOT.STOCKREF
Какой вопрос-то по SQL Server? В вашей модели данных, понятно, никто разобраться не сможет - никто её не знает. Я вот не понимаю, что такое "База", которую вам надо связать. Это база данных на том же сервере или на другом?
13 сен 11, 09:22    [11267157]     Ответить | Цитировать Сообщить модератору
 Re: Связь между 3-мя базами  [new]
Rovshan1975
Member

Откуда:
Сообщений: 41
База одна. Написал не правильно.. Связать надо эти таблицы....
13 сен 11, 09:26    [11267180]     Ответить | Цитировать Сообщить модератору
 Re: Связь между 3-мя базами  [new]
vanezy
Member

Откуда: Ekaterinburg->Moscow->Frankfurt
Сообщений: 122
посмотрите внимательно на имеющийся запрос, в нем связка таблиц осуществляется через INNER JOIN, вам нужно либо использовать его же аналогрично с целевой таблицей либо другие виды джойнов в зависимости от того, что хотите получить на выходе, подробности о джойнах в БОЛ
13 сен 11, 09:32    [11267203]     Ответить | Цитировать Сообщить модератору
 Re: Связь между 3-мя базами  [new]
Rovshan1975
Member

Откуда:
Сообщений: 41
Делаю через INNER JOIN данные на выходе For Last Month Sales меняються. Немогу понять причину.
13 сен 11, 09:52    [11267275]     Ответить | Цитировать Сообщить модератору
 Re: Связь между 3-мя базами  [new]
vanezy
Member

Откуда: Ekaterinburg->Moscow->Frankfurt
Сообщений: 122
Rovshan1975,

INNER JOIN отсеивает записи не удовлетворяющие условию в ON из общего рекордсета, отсюда и изменение результирующих сумм
13 сен 11, 10:05    [11267341]     Ответить | Цитировать Сообщить модератору
 Re: Связь между 3-мя базами  [new]
Rovshan1975
Member

Откуда:
Сообщений: 41
А как мне их оъединить? Замучался с этим запросом...
13 сен 11, 10:11    [11267385]     Ответить | Цитировать Сообщить модератору
 Re: Связь между 3-мя базами  [new]
vanezy
Member

Откуда: Ekaterinburg->Moscow->Frankfurt
Сообщений: 122
Rovshan1975,

Чтобы записи из общего рекордсета не отсеивались по условию вашего нового джойна, используйте LEFT JOIN вместо INNER
13 сен 11, 10:13    [11267403]     Ответить | Цитировать Сообщить модератору
 Re: Связь между 3-мя базами  [new]
Rovshan1975
Member

Откуда:
Сообщений: 41
SELECT ITEMS.CODE [Mal Kodu], ITEMS.NAME [Mal Aciklama], ITEMS.CYPHCODE [Firma],

SUM(CASE WHEN MONTH(STLINE.DATE_)= MONTH(GETDATE())-1 AND STLINE.CLIENTREF NOT IN (376) THEN
CASE STLINE.TRCODE WHEN 8 THEN 1 WHEN 3 THEN -1 ELSE 0 END * STLINE.AMOUNT END) [Onceki Ayin Cari Satisi],

INV.MINLEVEL [MIN MIKTAR], INV.MAXLEVEL [MAX MIKTAR], SUM(STOC.ONHAND) [Stock]

FROM LG_777_ITEMS AS ITEMS LEFT JOIN LG_777_01_STLINE AS STLINE ON ITEMS.LOGICALREF=STLINE.STOCKREF
LEFT JOIN LG_777_INVDEF AS INV ON STLINE.STOCKREF=INV.ITEMREF AND INV.INVENNO='0' LEFT JOIN LG_777_01_STINVTOT AS STOC ON STLINE.STOCKREF=STOC.STOCKREF
WHERE ITEMS.CYPHCODE='AZAHAR'
GROUP BY ITEMS.CODE, ITEMS.NAME, ITEMS.CYPHCODE,INV.MINLEVEL, INV.MAXLEVEL
ORDER BY ITEMS.CODE



Все данные меняються.
13 сен 11, 10:26    [11267484]     Ответить | Цитировать Сообщить модератору
 Re: Связь между 3-мя базами  [new]
vanezy
Member

Откуда: Ekaterinburg->Moscow->Frankfurt
Сообщений: 122
Rovshan1975,

Существующие INNER JOIN-ы нужно оставить без изменения (не менять их на LEFT), а вот соединение с новой таблицей (вроде так LG_XXX_GNTOT) нужно написать именно через LEFT, тогда кол-во строк в общем рекордсете по крайней мере не уменьшится, но может увеличиться. Нужно сначала проверить кол-во строк без суммирования а лучше проанализировать характер отношения таблиц чтобы понять, могут ли записи после добавления нового джойна размножиться. Если записи все же размножаются после добавления нового джойна, нужно как вариант джойнить не всю таблицу LG_XXX_GNTOT а в подзапросе группировать ее по одинаковым значениям поля, участвующего в условии соединения. Как то так
13 сен 11, 10:39    [11267571]     Ответить | Цитировать Сообщить модератору
 Re: Связь между 3-мя базами  [new]
vanezy
Member

Откуда: Ekaterinburg->Moscow->Frankfurt
Сообщений: 122
vanezy,

Точнее группировать надо будет не в подзапросе,а уже после соединения таблиц перед вычислением результирующих сумм
13 сен 11, 10:41    [11267590]     Ответить | Цитировать Сообщить модератору
 Re: Связь между 3-мя базами  [new]
Rovshan1975
Member

Откуда:
Сообщений: 41
Как не кручу не получаеться... На выходе сумм выдает завышенные суммы.
13 сен 11, 10:51    [11267660]     Ответить | Цитировать Сообщить модератору
 Re: Связь между 3-мя базами  [new]
ZOOKABAKODER
Member

Откуда:
Сообщений: 178
Учись!!!
SELECT
	[Mal Kodu] = ITEMS.CODE
,	[Mal Aciklama] = ITEMS.NAME
,	[Firma] = ITEMS.CYPHCODE
,	[Onceki Ayin Cari Satisi] =
		SUM(	
			CASE  WHEN MONTH(STLINE.DATE_) = MONTH(GETDATE()) -1
			AND  STLINE.CLIENTREF NOT IN (376) THEN
				CASE STLINE.TRCODE 
					WHEN 8 THEN 1 
					WHEN 3 THEN -1 
					ELSE 0 
				END 
				* STLINE.AMOUNT 
			END)
,	[MIN MIKTAR] = INV.MINLEVEL
,	[MAX MIKTAR] = INV.MAXLEVEL
,	[Stock] = SUM(STOC.ONHAND)
FROM
	LG_777_ITEMS AS ITEMS /* Чё за фигня? */
LEFT JOIN 
	LG_777_01_STLINE AS STLINE /* Чё за фигня? */
ON	ITEMS.LOGICALREF = STLINE.STOCKREF
LEFT JOIN 
	LG_777_INVDEF AS INV /* Чё за фигня? */
ON	STLINE.STOCKREF = INV.ITEMREF
AND	INV.INVENNO = '0'
LEFT JOIN 
	LG_777_01_STINVTOT AS STOC
ON	STLINE.STOCKREF = STOC.STOCKREF
WHERE
	ITEMS.CYPHCODE = 'AZAHAR'
GROUP 
BY	ITEMS.CODE
,	ITEMS.NAME
,	ITEMS.CYPHCODE
,	INV.MINLEVEL
,	INV.MAXLEVEL
ORDER 
BY	ITEMS.CODE
А теперь заменил /* Чё за фигня? */ на описание таблицы, и тогда будем думать.
13 сен 11, 10:55    [11267677]     Ответить | Цитировать Сообщить модератору
 Re: Связь между 3-мя базами  [new]
vanezy
Member

Откуда: Ekaterinburg->Moscow->Frankfurt
Сообщений: 122
Rovshan1975,

Значит записи судя по всему размножились, выведите часть результирующего набора допустим TOP 500 без суммирования чтобы было более понятно. Далее нужно понять как правильнее будет избавиться от дубликатов (GROUP BY, DISTINCT или как то еще).
13 сен 11, 10:55    [11267679]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить