|
Помогите составить запрос | ☑ | ||
---|---|---|---|---|
0
dergreche
31.08.15
✎
09:34
|
Есть таблица из 5 колонок с набором аналитик
ВидАналит1 ВидАналит2 ВидАналит3 ВидАналит4 Кол ------------------------------------------------------------------------------------------ Аналитика1А Аналитика2А Аналитика3А Аналитика4А 4.0 Аналитика1А Аналитика2А Аналитика3Б Аналитика4В 5.0 Аналитика1Б Аналитика2Б Аналитика3А Аналитика4А 3.4 Аналитика1А Аналитика2А Аналитика3В Аналитика4Б 2.5 Аналитика1Б Аналитика2Б Аналитика3Б Аналитика4Г 6.0 Аналитика1Б Аналитика2Б Аналитика3В Аналитика4Д 5.0 Во второй таблице задаются условия связи с первой таблицей по колонкам Фильтр-ВидАналит по соответствующим индексам. Например Колонка1 Фильтр1 Фильтр2 Фильтр3 Фильтр4 Показатель -------------------------------------------------------------------------------------------------------------------------- Спр1 все все все все 100 Спр1 Аналитика1А Аналитика2А Аналитика3Б Аналитика4В 200 Спр1 Аналитика1Б все все все 150 Спр1 Аналитика1Б Аналитика2Б все все 180 Необходимо запросом распределить вторую таблицу по первой с учетом связи по фильтрам аналитик |
|||
1
Cube
31.08.15
✎
09:52
|
Свзязывешь обе таблицы полным соединением и через ВЫБОР КОГДА ТОГДА КОНЕЦ тянешь показатели.
|
|||
2
dergreche
31.08.15
✎
10:13
|
я пожалуй уточню. При объединении нужно исключить строки с показателями сформированные по условиям фильтра более высокого уровня. Т.е.
должна остаться строка Спр1 Аналитика1А Аналитика2А Аналитика3Б Аналитика4В 200 а строка сформированная по условиям где не заданы филтры 1..4 Спр1 Аналитика1А Аналитика2А Аналитика3Б Аналитика4В 100 не должна включаться в запрос |
|||
3
Cube
31.08.15
✎
10:17
|
(2) Мой ответ остается неизменным...
В тех строках, где условия не выполняются, не бери показатель со второй таблицы, а ставь 0. Потом сгруппируешь итоговую таблицу и суммируешь показатели с одинаковой аналитикой. |
|||
4
igork1966
31.08.15
✎
10:19
|
(2) Ответь что такое "фильтр более высокого уровня".
А потом, подумай что будет если фильтры будут выглядеть так: Спр1,Аналитика1Б,все ,все,все,150 Спр1,все ,Аналитика2Б,все,все,180 Какая из строк "более высокого уровня"? |
|||
5
dergreche
31.08.15
✎
10:33
|
Фильтр задается последовательно от 1 до 4. Не может быть ситуации
Спр1,все ,Аналитика2Б,все,все,180 Фильтр2 нельзя задать не задав Фильтр1 |
|||
6
Cube
31.08.15
✎
10:39
|
(2) Ты косячишь: по условиям (0) должна получиться не
Спр1 Аналитика1А Аналитика2А Аналитика3Б Аналитика4В 200 а Спр1 Аналитика1А Аналитика2А Аналитика3Б Аналитика4В 300 т.к. есть ещё строка таблицы 2 Спр1 все все все все 100 =)) |
|||
7
Cube
31.08.15
✎
10:39
|
(5) Короче, больше разговоров...
На, разбирайся: ВЫБРАТЬ "Аналитика1А" КАК ВидАналит1, "Аналитика2А" КАК ВидАналит2, "Аналитика3А" КАК ВидАналит3, "Аналитика4А" КАК ВидАналит4, 4 КАК Кол ПОМЕСТИТЬ Таблица1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Аналитика1А", "Аналитика2А", "Аналитика3Б", "Аналитика4В", 5 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Аналитика1Б", "Аналитика2Б", "Аналитика3А", "Аналитика4А", 3.4 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Аналитика1А", "Аналитика2А", "Аналитика3В", "Аналитика4Б", 2.5 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Аналитика1Б", "Аналитика2Б", "Аналитика3Б", "Аналитика4Г", 6 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Аналитика1Б", "Аналитика2Б", "Аналитика3В", "Аналитика4Д", 5 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ "Спр1" КАК Колонка1, "все" КАК Фильтр1, "все" КАК Фильтр2, "все" КАК Фильтр3, "все" КАК Фильтр4, 100 КАК Показатель ПОМЕСТИТЬ Таблица2 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Спр1", "Аналитика1А", "Аналитика2А", "Аналитика3Б", "Аналитика4В", 200 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Спр1", "Аналитика1Б", "все", "все", "все", 150 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Спр1", "Аналитика1Б", "Аналитика2Б", "все", "все", 180 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Таблица2.Колонка1 КАК Колонка1, Таблица1.ВидАналит1 КАК ВидАналит1, Таблица1.ВидАналит2 КАК ВидАналит2, Таблица1.ВидАналит3 КАК ВидАналит3, Таблица1.ВидАналит4 КАК ВидАналит4, Таблица1.Кол КАК Кол, СУММА(ВЫБОР КОГДА (Таблица2.Фильтр1 = "все" ИЛИ Таблица2.Фильтр1 = Таблица1.ВидАналит1) И (Таблица2.Фильтр2 = "все" ИЛИ Таблица2.Фильтр2 = Таблица1.ВидАналит2) И (Таблица2.Фильтр3 = "все" ИЛИ Таблица2.Фильтр3 = Таблица1.ВидАналит3) И (Таблица2.Фильтр4 = "все" ИЛИ Таблица2.Фильтр4 = Таблица1.ВидАналит4) ТОГДА Таблица2.Показатель ИНАЧЕ 0 КОНЕЦ) КАК Показатель ИЗ Таблица1 КАК Таблица1 ЛЕВОЕ СОЕДИНЕНИЕ Таблица2 КАК Таблица2 ПО (ИСТИНА) СГРУППИРОВАТЬ ПО Таблица2.Колонка1, Таблица1.ВидАналит1, Таблица1.ВидАналит2, Таблица1.ВидАналит4, Таблица1.ВидАналит3, Таблица1.Кол |
|||
8
Cube
31.08.15
✎
10:41
|
+(7) Первые два пакета - просто описание твоих таблиц, ты их заменишь реальными. Нужный тебе кусок, о котором я говорил в (1):
ВЫБРАТЬ Таблица2.Колонка1 КАК Колонка1, Таблица1.ВидАналит1 КАК ВидАналит1, Таблица1.ВидАналит2 КАК ВидАналит2, Таблица1.ВидАналит3 КАК ВидАналит3, Таблица1.ВидАналит4 КАК ВидАналит4, Таблица1.Кол КАК Кол, СУММА(ВЫБОР КОГДА (Таблица2.Фильтр1 = "все" ИЛИ Таблица2.Фильтр1 = Таблица1.ВидАналит1) И (Таблица2.Фильтр2 = "все" ИЛИ Таблица2.Фильтр2 = Таблица1.ВидАналит2) И (Таблица2.Фильтр3 = "все" ИЛИ Таблица2.Фильтр3 = Таблица1.ВидАналит3) И (Таблица2.Фильтр4 = "все" ИЛИ Таблица2.Фильтр4 = Таблица1.ВидАналит4) ТОГДА Таблица2.Показатель ИНАЧЕ 0 КОНЕЦ) КАК Показатель ИЗ Таблица1 КАК Таблица1 ЛЕВОЕ СОЕДИНЕНИЕ Таблица2 КАК Таблица2 ПО (ИСТИНА) СГРУППИРОВАТЬ ПО Таблица2.Колонка1, Таблица1.ВидАналит1, Таблица1.ВидАналит2, Таблица1.ВидАналит4, Таблица1.ВидАналит3, Таблица1.Кол |
|||
9
Cube
31.08.15
✎
10:43
|
+(7) (8) Ой, у меня левое соединение получилось... Ну сам тестируй, нужно там полное или нет, а то зарплату-то тебе получать, сделай хоть что-нибудь))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |