![]() |
|
Модераторы: skyboy |
![]()
|
|
| ekaterina_tw |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 25.1.2008 Репутация: нет Всего: нет |
Здравствуйте, помогите написать запрос. (MS SQL 2005)
такая задача: есть таблица:
Т.е. в результате для каждого клиента должны быть записи со всеми имеющимися разновидностями акций. Буду благодарна за помощь. Спасибо! |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
Это сообщение отредактировал(а) Zloxa - 29.4.2009, 16:22 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| ТоляМБА |
|
|||
![]() Котэ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1607 Регистрация: 15.12.2004 Репутация: 4 Всего: 252 |
...Удалил...
Потому что проверял на связях 1 клиент имеет акцию одного банка, а если акции нескольких банков - запрос выдаёт ерунду. Сорри. Это сообщение отредактировал(а) ТоляМБА - 29.4.2009, 15:33 |
|||
|
||||
| DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 4 Всего: 44 |
Это сообщение отредактировал(а) DimW - 29.4.2009, 15:55 |
|||
|
||||
| Zloxa |
|
||||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
DimW,
-------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
||||
|
|||||
| DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 4 Всего: 44 |
да, косяк.
Это сообщение отредактировал(а) DimW - 29.4.2009, 16:30 |
|||
|
||||
| ekaterina_tw |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 25.1.2008 Репутация: нет Всего: нет |
ТоляМБА,
спасибо преогромное! кажется сработало! урааааа DimW, это условие нужно для того, чтобы в результат не включались строки типа: клент_1 | акции_Сбер | 0, если акции_Сбер у клиента_1 уже есть, т.е. значение не 0. Всем большое спасибо за предложенные варианты! |
|||
|
||||
| DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 4 Всего: 44 |
||||
|
||||
| ТоляМБА |
|
|||
![]() Котэ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1607 Регистрация: 15.12.2004 Репутация: 4 Всего: 252 |
||||
|
||||
| ekaterina_tw |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 25.1.2008 Репутация: нет Всего: нет |
ну вот, а я проверяю весь день, вроде нормально работает :(
уже облагородила запрос и все написала, ни разу ерунду не выдал. Пожалуйста покажите, в каком случае будет неправильный результат? Очень нужно, спасибо. Добавлено через 2 минуты и 33 секунды Как же это сделать, используя FULL OUTER JOIN? Добавлено через 5 минут и 58 секунд DimW, может поясните свою мысль? ваш запрос не поняла, содержимое таблицы мне не известно, Insert использовать не могу |
|||
|
||||
| ekaterina_tw |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 25.1.2008 Репутация: нет Всего: нет |
Zloxa,
а что такое 'dual' в вашем запросе? |
|||
|
||||
| ekaterina_tw |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 25.1.2008 Репутация: нет Всего: нет |
давайте попробуем разобраться... запрос выдает таблицу, в которой для одного клиента могут содержаться строки типа: клиент_1, сток_1, 1 клиент_1, сток_1, 0 это устраняется оператором group by, или вы что-то другое получили в результате? Добавлено через 5 минут и 6 секунд Zloxa, Ваш запрос возвращает таблицу с нулевыми строками, хотя может я его неправильно интерпритировала.
при чем здесь ''клиент_1', 'клиент_2'? я же не знаю, какие строки содержатся в таблице, клиентов я для примера написала |
||||
|
|||||
| ТоляМБА |
|
||||
![]() Котэ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1607 Регистрация: 15.12.2004 Репутация: 4 Всего: 252 |
Klient Bank Akcii Клиент1 Банк1 1 Клиент1 Банк4 14 Получим результат Klient Bank Akcii Клиент1 Банк1 1 Клиент1 Банк2 0 Клиент1 Банк3 0 Клиент1 Банк4 0 Клиент1 Банк4 14 что не есть правильно. Можно конечно сделать вот так:
но почему-то я уверен что будет он очень тормозить при большом количестве записей. |
||||
|
|||||
| ekaterina_tw |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 25.1.2008 Репутация: нет Всего: нет |
вы хотите сказать, что Bank2 и Bank3 в таблице не содержится, но строчки
Клиент1 Банк2 0 Клиент1 Банк3 0 создаются? что такое Банк2, Банк3? откуда беруться эти значения? уверена, что в таблице они есть. Да? |
|||
|
||||
| ТоляМБА |
|
|||
![]() Котэ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1607 Регистрация: 15.12.2004 Репутация: 4 Всего: 252 |
Полная моя таблица для проверки:
Klient Bank Akcii Клиент1 Банк1 1 Клиент1 Банк4 14 Клиент2 Банк2 2 Клиент3 Банк3 3 Клиент4 Банк4 4 Добавлено через 1 минуту Я имел ввиду что при первом моем запросе строчка Клиент1 Банк4 0 есть косяк. |
|||
|
||||
| ekaterina_tw |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 25.1.2008 Репутация: нет Всего: нет |
спасибо.
если таблица такого вида Klient Bank Akcii Клиент1 Банк1 1 Клиент1 Банк4 14 Клиент2 Банк2 2 Клиент3 Банк3 3 Клиент4 Банк4 4 , то мне нужен результат: Klient Bank Akcii Клиент1 Банк1 1 Клиент1 Банк2 0 Клиент1 Банк3 0 Клиент1 Банк4 14 Клиент2 Банк1 0 Клиент2 Банк2 2 Клиент2 Банк3 0 Клиент2 Банк4 0 Клиент3 Банк1 0 Клиент3 Банк2 0 Клиент3 Банк3 3 Клиент3 Банк4 0 Клиент4 Банк1 0 Клиент4 Банк2 0 Клиент4 Банк3 0 Клиент4 Банк4 4 По-моему первый вариант, который Вы написали, как раз это и выдает. Добавлено через 2 минуты и 35 секунд
ага, понятно. я имею ввиду, что при использовании вашего запроса внутри SELECT sum(Akcii) GROUP BY Банк результат получается верным. Разве нет? |
|||
|
||||
| ТоляМБА |
|
|||
![]() Котэ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1607 Регистрация: 15.12.2004 Репутация: 4 Всего: 252 |
Первый запрос выдаст: Klient Bank Akcii Клиент1 Банк1 1 Клиент1 Банк2 0 Клиент1 Банк3 0 Клиент1 Банк4 0 Клиент1 Банк4 14 Клиент2 Банк1 0 Клиент2 Банк2 2 Клиент2 Банк3 0 Клиент2 Банк4 0 Клиент3 Банк1 0 Клиент3 Банк2 0 Клиент3 Банк3 3 Клиент3 Банк4 0 Клиент4 Банк1 0 Клиент4 Банк2 0 Клиент4 Банк3 0 Клиент4 Банк4 4 красным выделен косяк. |
|||
|
||||
| ekaterina_tw |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 25.1.2008 Репутация: нет Всего: нет |
ага, а GROUP BY прекрасно с этим косяком справится.
|
|||
|
||||
| ТоляМБА |
|
|||
![]() Котэ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1607 Регистрация: 15.12.2004 Репутация: 4 Всего: 252 |
Нету у меня под рукой MS-SQL, писал на акцессе, а он FULL OUTER JOIN не поддерживает
Добавлено через 2 минуты и 13 секунд Нет, с ним справился SUM, а GROUP BY из-за того что используется агрегированая ф-ия. |
|||
|
||||
| DimW |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 4 Всего: 44 |
1) я создаю таблицу. 2) наполняю ее данными. 3) выполняю запрос который должен решить вашу проблему, с данными которые на втором шаге я вставил в таблицу.
это тестовые данные, представленны для наглядности. |
||||
|
|||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
Здесь full outer не нужен. Тема озаглавлена не правильно. dual эта таблица, которая содержит одну запись Используется для того, чтобы иммитировать исходные данные. Сам запрос начинается с пятой строки. Что такое "возвращает нулевые строки", мне не понятно -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| ekaterina_tw |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 25.1.2008 Репутация: нет Всего: нет |
DimW,
спасибо, действительно все верно. Отличный вариант! Zloxa, спасибо! Тоже все работает отлично! |
|||
|
||||
| DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 4 Всего: 44 |
||||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Составление SQL-запросов | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |