Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.04.01;
Скачать: [xml.tar.bz2];

Вниз

Как составить SQL запрос   Найти похожие ветки 

 
AndrewK   (2002-03-05 15:35) [0]

Здравствуйте.

Есть две таблицы

Table1
IDR int
Product_ID int
Order_ID int
Count int

и

Table2
IDR int
Product_ID int
Order_ID int
Count int

В таблицу Table1 заносится информация пользователями. Таблица используется для хранения перечней в заказе (ID записи заказа храниться в поле Order_ID). Есть главный менеджер, который должен знать какие изменения произошли в заявках за время его отсутствия. Для сохранения того, что он посмотрел использую таблицу Table2. Для этого просто переношу всю информацию из Table1 в Table2. Стоит задача сравнить две эти таблицы между собой и вывести отчет сколько продуктов было добавлено, сколько изменено, сколько удалено.

Т.е. получить примерно вот это:

Продукт Было Стало Разница

Продукт 1 0 2 2
Продукт 2 3 1 -2
Продукт 1 5 0 -5

Бьюсь над этим уже дня четыре, ничего не получается. А запрос вроде бы должен быть простым.


 
Johnmen   (2002-03-05 15:47) [1]

SELECT B.Count,A.Count,A.Count-B.Count AS Diff FROM Table1 A
JOIN Table2 B ON B.Order_ID=A.Order_ID

По-моему так...


 
Bachin   (2002-03-05 19:36) [2]

2Johnmen:
не совсем... скорее

SELECT B.Count,A.Count,A.Count-B.Count AS Diff
FROM Table2 B
OUTER JOIN Table1 A ON B.IDR=A.IDR
подзабыл MSSQL т проверить негде, но идея в связи NULL или 1


 
AndrewK   (2002-03-06 19:09) [3]

Запросы не работают.

Более менее что-то рабочее получилось что-то вроде этого. Однако и он тоже не всегда корректно работает иногда. Чувствую, что я что-то намудрил, но проще не получается.

select
InBuffer, InFact, (InFact-InBuffer) as Diff
from
(
select isnull(t2.Count, 0) as InBuffer,
isnull(t1.Count, 0) as InFact
from table1 t1
full join table2 t2 on t2.Order_ID = t1.Order_ID
union
select isnull(t2.Count, 0) as InBuffer,
isnull(t1.Count, 0) as InFact
from table2 t2
full join table1 t1 on t2.Order_ID = t1.Order_ID
) ResTable


 
boogier   (2002-03-07 11:14) [4]

select * from table1 where not exists(select Order_id from table2 where table1.order_id= table2.order_id)


 
AndrewK   (2002-03-07 14:51) [5]

2 boogier> Тож не работает


 
boogier   (2002-03-07 16:01) [6]

не мож б


 
MetallAdm   (2002-03-07 16:05) [7]

А Как Вам Такой Пример ??

У меня сдеся две таблички я для пробы сделал
(я не стал на конкретном примере енто делать)

t1 (Table)
t int

t2 (Table)
t int

туда запихал разные числа

declare @t1 int
declare @t2 int

SET NOCOUNT ON
declare test_cur cursor for
select a.t,b.t from t1 a,t2 b
open test_cur
fetch next from test_cur into @t1,@t2
while (@@fetch_status <> -1)
begin
if (@@fetch_status <> -2)
begin
Select @t1 as "Было" ,@t2 as "Стало " ,@t1-@t2 as "разница"
end
fetch next from test_cur into @t1,@t2
end
close test_cur
deallocate test_cur

но скорее енти данные придется заносить в какуюто табличку

а оттуда выводить

попробуй опираясь
на енто ведь, курсоры довольно удобная вещь :))

Думаю проше моно было но вот непонятно
в каих полях "Было" "Стало" "Продукт"

IDR int
Product_ID int
Order_ID int
Count int -- Или здеся сумма из которой вы хотите получить разницу ??








 
DPetrovich   (2002-03-07 16:17) [8]

to AndrewK © :
Думаю
select
InBuffer, InFact, (InFact-InBuffer) as Diff
from
(
select isnull(t2.Count, 0) as InBuffer,
isnull(t1.Count, 0) as InFact
from table1 t1
full join table2 t2 on t2.Order_ID = t1.Order_ID
union
select isnull(t2.Count, 0) as InBuffer,
isnull(t1.Count, 0) as InFact
from table2 t2
full join table1 t1 on t2.Order_ID = t1.Order_ID
) ResTable

должно работать, хотя я написал бы так...

(select
isnull(t2.Count, 0) as InBuffer,
isnull(t1.Count, 0) as InFact,
(isnull(t2.Count, 0) - isnull(t1.Count, 0)) as Diff
from
table1 t1
left join table2 t2 on t2.Order_ID = t1.Order_ID)
union
(select
isnull(t2.Count, 0) as InBuffer,
isnull(t1.Count, 0) as InFact,
(isnull(t2.Count, 0) - isnull(t1.Count, 0)) as Diff
from
table2 t2
left join table1 t1 on t2.Order_ID = t1.Order_ID)




Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.04.01;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.005 c
1-220
Марина
2002-03-20 11:13
2002.04.01
Неизвестный (мне) тип данных


7-337
Pagan
2001-12-28 11:52
2002.04.01
Номер сетевой платы


4-361
Serg001
2002-01-30 10:24
2002.04.01
Как узнать классы всех окон, но только родительских


1-245
Flagman
2002-03-20 12:43
2002.04.01
TBaseArray


3-67
iPen
2002-03-05 11:01
2002.04.01
Программное свешивание в ячейке DBGrid-а





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский