powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите решить задачу на transact sql.
3 сообщений из 3, страница 1 из 1
Помогите решить задачу на transact sql.
    #40093259
RonaldLRivest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите пожалуйста решить задачу на transact sql.

ЗАДАЧА:

В магазине на разных стеллажах (местах продаж) выложены товары. Информация об этом поступает в виде анкет (вопрос-ответ) из двух источников:
1. Анкета торгового агента
2. Анкета аудитора
Необходимо выполнить сравнение анкет торгового агента с анкетами аудитора, чтобы понять, насколько достоверно торговый агент предоставил данные.

ДАНО:
Три таблицы:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
--------------------------------------------------------------------------
| GROUP       | ITEM1                       | ITEM2                      |
--------------------------------------------------------------------------
|(PK) ID      |(PK) ID_Group (fk GROUP.ID)  |(PK) ID_Group (fk GROUP.ID) |
|     ByGroup |(PK) Code                    |(PK) Code                   |
|             |     Value                   |     Value                  |
|             |     IsPrimary               |     IsPrimary              |
--------------------------------------------------------------------------



ГЛОССАРИЙ:
* Группа элементов - Набор записей из таблиц ITEMx с одинаковым значением ID_Group (т.е. записи относящиеся к одной группе)
* Элемент - запись в таблицах ITEMx, которая идентифицируется полем Code. Одни и те же элементы могут присутствовать в разных группах
* Главный элемент - элемент группы, у которого IsPrimary = 1. Такой элемент в группе может быть только один

ЗАДАЧА:
Вывести: Code, ITEM1.ID_Group, ITEM1.Value и ITEM2.ID_Group, ITEM2.Value, сопоставленные по группам по следующим правилам:
1) элементы между группами сопоставляются по полю Code (т.е. всегда ITEM1.Code = ITEM2.Code)
2) группы элементов в ITEM1 сопоставляются с элементами группы в ITEM2 по следующему правилу:
если в соответствующей записи таблицы GROUP (связь с ITEMx по идентификатору ID_Group) флаг ByGroup = 1
то: ITEM1 и ITEM2 сопоставляются по ID_Group, Code
иначе: необходимо сопоставить группы и все их элементы из двух таблиц по значению Value в главном элементе

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
create table [Group]
(
    ID int primary key,
    ByGroup bit
)

create table ITEM1 (
    ID_Group int foreign key references [Group](ID),
    Code varchar(100),
    Value varchar(100),
    IsPrimary bit,
    primary key (ID_Group, Code)
)

create table ITEM2 (
    ID_Group int foreign key references [Group](ID),
    Code varchar(100),
    Value varchar(100),
    IsPrimary bit,
    primary key (ID_Group, Code)
)

------

delete from [Item1]
delete from [Item2]
delete from [Group]

insert into [Group] values (1, 1)
insert into [Group] values (2, 0)
insert into [Group] values (3, 0)
insert into [Group] values (4, 0)

-- Item1
insert into [Item1] values (1, 'Место продаж', 'Основная полка', 0)
insert into [Item1] values (1, 'Длина полки', '3', 0)
insert into [Item1] values (1, 'Высота выкладки', '120', 0)
insert into [Item1] values (1, 'Кол-во товаров', '42', 0)

insert into [Item1] values (2, 'Место продаж', 'Навеска 1', 0)
insert into [Item1] values (2, 'Бренд', 'Greenland', 1)
insert into [Item1] values (2, 'Длина выкладки', '20', 0)
insert into [Item1] values (2, 'Кол-во товаров', '10', 0)

insert into [Item1] values (3, 'Место продаж', 'Навеска 2', 0)
insert into [Item1] values (3, 'Бренд', 'Freefly', 1)
insert into [Item1] values (3, 'Длина выкладки', '60', 0)
insert into [Item1] values (3, 'Кол-во товаров', '40', 0)

insert into [Item1] values (4, 'Место продаж', 'Навеска 3', 0)
insert into [Item1] values (4, 'Бренд', 'Coco', 1)
insert into [Item1] values (4, 'Длина выкладки', '50', 0)
insert into [Item1] values (4, 'Кол-во товаров', '30', 0)

-- Item2
insert into [Item2] values (1, 'Место продаж', 'Основная полка', 1)
insert into [Item2] values (1, 'Длина полки', '4', 0)
insert into [Item2] values (1, 'Высота выкладки', '125', 0)
insert into [Item2] values (1, 'Кол-во товаров', '42', 0)

insert into [Item2] values (2, 'Место продаж', 'Навеска 1', 0)
insert into [Item2] values (2, 'Бренд', 'Coco', 1)
insert into [Item2] values (2, 'Длина выкладки', '60', 0)

insert into [Item2] values (2, 'Кол-во товаров', '', 0)
insert into [Item2] values (3, 'Место продаж', 'Навеска 2', 0)
insert into [Item2] values (3, 'Бренд', 'Greenland', 1)
insert into [Item2] values (3, 'Длина выкладки', '30', 0)
insert into [Item2] values (3, 'Кол-во товаров', '5', 0)

insert into [Item2] values (4, 'Место продаж', 'Навеска 3', 0)
insert into [Item2] values (4, 'Бренд', '', 1)
insert into [Item2] values (4, 'Длина выкладки', '', 0)
insert into [Item2] values (4, 'Кол-во товаров', '', 0)

...
Рейтинг: 0 / 0
Помогите решить задачу на transact sql.
    #40093266
Oleg_SQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RonaldLRivest,


так?

Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT Item1.Code, ITEM1.ID_Group, ITEM1.Value, ITEM2.ID_Group, ITEM2.Value
  FROM Item1
  JOIN Item2 ON Item1.Code = Item2.Code
       AND (Item1.Value = Item2.Value AND Item1.ID_Group NOT IN (SELECT ID FROM [Group] WHERE ByGroup = 1)
             OR 
            (Item1.ID_Group = Item2.ID_Group AND Item1.ID_Group IN (SELECT ID FROM [Group] WHERE ByGroup = 1))
           )
...
Рейтинг: 0 / 0
Помогите решить задачу на transact sql.
    #40093783
RonaldLRivest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Oleg_SQL,
Спасибо большое, кажется что так.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите решить задачу на transact sql.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]