![]() |
|
Модераторы: skyboy |
![]()
|
|
| aleksh |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 609 Регистрация: 8.7.2008 Репутация: нет Всего: 13 |
никак не получается составить запрос
есть несколько таблиц
и еще несколько, но не в них сложность нужно как-то выкрутиться, чтобы в итоге выводилось
база MS SQL |
||||
|
|||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
Смоделируй в Аксессе (подключись к БД из проекта), и воспользуйся визуальным построителем запросов.
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| aleksh |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 609 Регистрация: 8.7.2008 Репутация: нет Всего: 13 |
попробовал, ничего не получилось
по сути ![]() вот упрощенная схема в таблице campaign содержится часть записей из таблицы account нужно вывести country.name, state.name, count(account.id), count(campaign.ida) грубо говоря - страна, область, всего, в работе если бы в таблицы campaign были указаны country.id и state.id проблем бы не было, задал бы колонку-запрос, где в условии where сравнивал account.idc и campaign.idc, но увы, таких полей нет возможно ли вообще как-то это выбрать? Это сообщение отредактировал(а) aleksh - 30.5.2011, 16:21 |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
Схема - заведомо кривая. Согласно ей одной записи из account можно сопоставить две разных записи из country - одну непосредственно и вторую через state. И контроль целостности это пропустит.
Безотносительно к логике происходящего - в таблице account не должно быть поля idc. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| aleksh |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 609 Регистрация: 8.7.2008 Репутация: нет Всего: 13 |
кто бы спорил, но "имеем то, что имеем", на сколько могу судить, разработчики продукта сделали так, чтобы при импорте можно было вливать что угодно, а потом уже упорядочивать, или с самого начала сделали криво, а потом было лень дорабатывать
а касательно двух записей, там при вставке из программы через state идет проверка наличия записи в country а по сути - задачи в принципе реализуема и мне биться дальше, или при данной схеме ничего не выйдет и надо руками править бд (чего делать не хочется)? |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
aleksh, задача в принципе не реализуема именно из-за неоднозначности.
Тебе придётся принять решение о том, что одну из связей в треугольнике следует удалить. Вернее, игнорировать. Только так задачу можно сделать решаемой. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| aleksh |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 609 Регистрация: 8.7.2008 Репутация: нет Всего: 13 |
хорошо, допустим мы выбросим таблицу country, как быть тогда?
|
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
Если выбросить таблицу - то не получится получить в выходном наборе поле из неё - а оно указано среди получаемых данных.
Выбросить надо одну из трёх связей. Логика требует удалить связь между account и country. И тогда (формально, без смысла происходящего)
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| aleksh |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 609 Регистрация: 8.7.2008 Репутация: нет Всего: 13 |
спасибо, но дает одинаковые цифры
логика следующая - есть контакты (все) и это таблица account, к ним привязана информация о них, это таблицы country и state, и еще есть таблица (которая campaign), которая хранит записи о контактах которые нынче в работе (то есть в таблице campaign значений из account меньше чем в первой быть может равное) нужно выбрать, для отчета старшим товарищам, где будет инфа о контакте, количество всего в бд, и количество тех контактов, которых начали теребить (последняя таблица), беда в том, что если пытаться выбрать тех кто в работе (в последней таблице) то не удается выбрать количество всего вот как-то так |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
MS SQL, к счастью, поддерживает COUNT(DISTINCT fieldset). Замените...
Добавлено через 5 минут и 5 секунд Впрочем, это вряд ли поможет - строка с null всё равно строка. Во-первых, т.к. не каждому acсount соответствует campaign, то связывание должно быть левое. Во-вторых, считать надо только не-NULL строки, что делается обычно не очень изящной заменой COUNT(field) на SUM(CASE WHEN field IS NULL THEN 0 ELSE 1 END) -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| aleksh |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 609 Регистрация: 8.7.2008 Репутация: нет Всего: 13 |
ладно, пойдем другим путем, будем менять логику отчета
спасибо за участие |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
Запрос-то почти готов... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| aleksh |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 609 Регистрация: 8.7.2008 Репутация: нет Всего: 13 |
так ничего не получается
а касательно суммирования - результат тоже не подходящий |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
В аттаче модель в MS Accesss. ИМХО всё соответствует тому, что тебе требуется.
Проверяй. Присоединённый файл ( Кол-во скачиваний: 3 )
db.zip 28,70 Kb-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| aleksh |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 609 Регистрация: 8.7.2008 Репутация: нет Всего: 13 |
хм, действительно, то что надо...
я забыл упомянуть об еще одном условии, которое все портит - в таблице campaign есть поле roleid, и нужно из этой таблицы выбрать только то количество, где это roleid не null, и попытка вставить это условие все портит... надо было сразу написать Akina, большое спасибо за уделенное время |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
Я даже теоретически не представляю, как это оно может всё портить... тем более когда отбор делается на правой стороне... добавь в модель это поле, заполни (некоторые), добавь условие отбора - всё обязано работать. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| aleksh |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 609 Регистрация: 8.7.2008 Репутация: нет Всего: 13 |
грубо говоря
так вот - без where цифры отличаются, то есть количество в бд в большинстве случаев больше количества в campaign, а с where цифры выравниваются как не извращался, что к чему не left join-ил - никак для иллюстрации измененная бд Присоединённый файл ( Кол-во скачиваний: 1 )
________________________.zip 32,70 Kb |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
aleksh, у Вас логика хромает. Вы хотите одно, а просите совсем другое. Отбор по not [tbl_CampaignAudience].RoleID is null нужно делать ДО связывания (или, что то же самое в данном случае - во время связывания), а не после.
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| aleksh |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 609 Регистрация: 8.7.2008 Репутация: нет Всего: 13 |
что б я сдох
не знал, что так можно... а с логикой - не спорю, вполне может быть большое спасибо |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Составление SQL-запросов | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |