Запрос на обновление
От: RAPTORGrrr  
Дата: 28.08.08 12:42
Оценка:
Добрый день!

Есть 2 таблицы в (в примере СТ и СО
В СТ id товара и наименование.
В СО счетчик и код товара (CT.id)
А СЕ это диапазон из Excel.

Пример

CE           CT              CO
name           id  name             id num
Товар1        1 Товар1         1  1
Товар2        2 Товар2         2  2
Товар5        3 Товар5         3    3
Товар8        4 Товар8         4  4
Товар8                     5  4
Товар1



Цель найти отличия (т.е каких записей не хватает) в таблице СО по сравнению с CE
В результате в CO должна будет добавиться запись 1.

Используя подзапрос c with not in. нахожу разницу но выдает только уникальные записи, а мне нужны все повторы.



Пример 2
СЕ       СО
Товар1    Товар1
Товар2    Товар2
Товар1
Товар3    

Результат: Товар3

Нужнен результат: Товар3, Товар1


Как можно решить такую задачу?
Может что нужно поправить в таблицах, что бы запрос был выполнен?
Re: Запрос на обновление
От: danclax  
Дата: 28.08.08 12:49
Оценка:
Здравствуйте, RAPTORGrrr, Вы писали:

RAP>Добрый день!


RAP>Есть 2 таблицы в (в примере СТ и СО

RAP>В СТ id товара и наименование.
RAP>В СО счетчик и код товара (CT.id)
RAP>А СЕ это диапазон из Excel.

RAP>
RAP>Пример

RAP>CE           CT              CO
RAP>name           id  name             id num
RAP>Товар1        1 Товар1         1  1
RAP>Товар2        2 Товар2         2  2
RAP>Товар5        3 Товар5         3    3
RAP>Товар8        4 Товар8         4  4
RAP>Товар8                     5  4
RAP>Товар1                
RAP>



RAP>Цель найти отличия (т.е каких записей не хватает) в таблице СО по сравнению с CE

RAP>В результате в CO должна будет добавиться запись 1.

А в CT нужно записи повторяющиеся добавлять?
Re[2]: Запрос на обновление
От: RAPTORGrrr  
Дата: 28.08.08 13:09
Оценка:
D>А в CT нужно записи повторяющиеся добавлять?

В СТ добавлять ничего не нужно. По нему определяетья связь id и наименование, поскольку в СЕ только наименование, а в СО только id
Re[3]: Запрос на обновление
От: danclax  
Дата: 28.08.08 13:35
Оценка:
Здравствуйте, RAPTORGrrr, Вы писали:


D>>А в CT нужно записи повторяющиеся добавлять?


RAP>В СТ добавлять ничего не нужно. По нему определяетья связь id и наименование, поскольку в СЕ только наименование, а в СО только id


А если появится дубликат в CE, то как ты добавишь запись в CO со счетчиком 1, если там уже будет запись с таким же id?
Какая СУБД кстати? А то запросы посложнее отличаются синтаксисом на различных СУБД
Re[4]: Запрос на обновление
От: Аноним  
Дата: 29.08.08 08:27
Оценка:
D>А если появится дубликат в CE, то как ты добавишь запись в CO со счетчиком 1, если там уже будет запись с таким же id?
D>Какая СУБД кстати? А то запросы посложнее отличаются синтаксисом на различных СУБД

danclax

Уточню задачу (прежде абстрагировался с товарами, etc)

В таблице СТ — справочник должностей
id — код должности
name — наименование должности
Пример 1
id name
1 Начальник
2 Директор
3 Уборщица

В таблице СО — штатные должности с подразделением
id — счетник
num — код должности
lev — код подразделения

Пример 2
id num lev
1 1 1
2 2 2
3 2 3
4 3 2

Таблица СЕ — береться из листа Excel, указан штатный состав,
причем записи повторяються.

Пример 3

Должность Подразделение

Уборщица 2
Уборщица 2
Начальник 2
Начальник 2


В результате нужно добавить в подразделение 2
1 начальника и 1 уборщицу, а таблица СO станет такой
id num lev
1 1 1
2 1 2
3 2 3
4 3 2
5 3 2
6 1 2

База: старый Informix, я использовал только SQL-92, конструкцию вида:
select ce. должность
from ce
where ce. должность not in
(select ... )

Есть какие-нибудь предложения?
Re[4]: Запрос на обновление
От: RAPTORGrrr  
Дата: 29.08.08 08:38
Оценка:
Соседний пост писал я.
Забыл добавить: в результате запроса выдаються должности которых вообще нет в со, а мне нужно что бы все даже с одинаковым названием.
Re[5]: Запрос на обновление
От: danclax  
Дата: 30.08.08 13:06
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть какие-нибудь предложения?


Понятно, что получить. Но решения я не вижу... Остается писать SP посложнее, одним запросом не обойтись...
Re: Запрос на обновление
От: Аноним  
Дата: 30.08.08 14:35
Оценка:
Здравствуйте, RAPTORGrrr, Вы писали:

RAP>Добрый день!


RAP>Есть 2 таблицы в (в примере СТ и СО

RAP>В СТ id товара и наименование.
RAP>В СО счетчик и код товара (CT.id)
RAP>А СЕ это диапазон из Excel.

RAP>
RAP>Пример

RAP>CE           CT              CO
RAP>name           id  name             id num
RAP>Товар1        1 Товар1         1  1
RAP>Товар2        2 Товар2         2  2
RAP>Товар5        3 Товар5         3    3
RAP>Товар8        4 Товар8         4  4
RAP>Товар8                     5  4
RAP>Товар1                
RAP>



RAP>Цель найти отличия (т.е каких записей не хватает) в таблице СО по сравнению с CE

RAP>В результате в CO должна будет добавиться запись 1.

RAP>Используя подзапрос c with not in. нахожу разницу но выдает только уникальные записи, а мне нужны все повторы.




RAP>
RAP>Пример 2
RAP>СЕ       СО
RAP>Товар1    Товар1
RAP>Товар2    Товар2
RAP>Товар1
RAP>Товар3    

RAP>Результат: Товар3

RAP>Нужнен результат: Товар3, Товар1
RAP>


RAP>Как можно решить такую задачу?

RAP>Может что нужно поправить в таблицах, что бы запрос был выполнен?


SELECT query_2.[Name]
FROM    (SELECT CO.[CT_id], COUNT(CO.[CT_id]) AS CT_ID_COUNT
        FROM CO 
        GROUP BY CO.[CT_id]) AS query_1
        INNER JOIN 
        (SELECT CT.[Id], CT.[Name], COUNT(CE.[Name]) AS CE_COUNT
        FROM [CE]
        INNER JOIN [CT] ON CT.[Name] = CE.[Name]
        GROUP BY CT.[Id], CT.[Name]) AS query_2 ON query_1.[CT_id] = query_2.Id AND query_1.CT_ID_COUNT <> query_2.CE_COUNT;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.