| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MS SQL Server > отображение результата |
| Автор: 4ybaka 15.10.2007, 21:14 |
| нужно в зависимости от результата запроса в одном столбце вывести либо столбец из одной таблицы,либо столбец из другой.как это можно реализовать? |
| Автор: SergKO 16.10.2007, 08:27 |
| используйте CASE |
| Автор: 4ybaka 16.10.2007, 15:46 |
| уже пробовал,но опыта пока для этого не хватает... |
| Автор: SergKO 16.10.2007, 16:08 |
| Приведите запрос, и покажите из каких полей надо выбирать. |
| Автор: 4ybaka 16.10.2007, 17:33 | ||||
база NorthWind у меня запрос получился такой:
но в нем вместо E.LastName и C.ContactName нужно вывести один столбец ‘Person’,значение в кот либо из E.LastName либо из C.ContactName.и еще добавить столбец ‘Type’,кот также необходимо заполнить как указано выше. |
| Автор: SergKO 17.10.2007, 06:16 | ||
Очень похоже на упражнение на sql-ex. Давайте так, полностью Вы запрос напишите сами, а пример использования CASE вот
|
| Автор: 4ybaka 17.10.2007, 18:41 |
| на сколько я знаю,при таком соединении таблиц(скалярное произведение вроде) у нас в каждой строчке будет и E.LastName и C.ContactName,те ни один из них не будет is null.значит всегда будет выводиться пустая строка...подскажите хотя бы в какую сторону копать. |
| Автор: Servena 17.10.2007, 21:43 | ||||
Использую Northwind, попробуй так:
И не использовать JOIN - это не значит использовать старый синтаксис соединения, я думаю. В скором будущем сервера БД не будут его поддерживать, а будут использовать ANSI стандарт. Добавлено через 23 секунды Использую Northwind, попробуй так:
И не использовать JOIN - это не значит использовать старый синтаксис соединения, я думаю. В скором будущем сервера БД не будут его поддерживать, а будут использовать ANSI стандарт. Добавлено через 3 минуты и 8 секунд Два раза одно и тоже - это глюкануло, не отправлялось долго и т.д. |
| Автор: 4ybaka 17.10.2007, 22:12 | ||
| Servena, спасибо за помощь,но я виноват,надо было сразу все ограничения дать... вообщем тема задания была такая:
так что union здесь использовать нельзя.я тоже хотел |
| Автор: Servena 18.10.2007, 06:35 |
| Ну так а в предыдущих примерах использовалось тоже соединение, но только оно написано в станом синтаксисе(без слова джоин). Какая разница?! Но я еще подумаю над этим. А временные таблицы использовать можно? |
| Автор: Servena 18.10.2007, 09:51 |
| Так, после разговора с "экспертами" можно с уверенность сказать, что использовать данные с двух разных таблиц, не использую соединения их - невозможно. Теперь нужно разобраться с условием задачи: Явное соединение таблиц, самосоединения, ... - что это значит? А что есть не явное соединение? Или не так, используя синтаксис типа: from Customers C,Employees E - можно ли его назвать неявным соединением? Я думаю что нет, поскольку это обычный синтаксис MS SQL до 6.5 версии, другого тогда не было, т.е. это обычная старая (явная) запись объединения(методом пересечения, в стандарте ANSI это называется CROSS JOIN). Таким образом прихожу к заключению - нужно уточнить условие задачи, т.е. расшифровать, что значит "неявное" соединение, потому что без соединения тут не обойтись. |
| Автор: Servena 18.10.2007, 20:13 |
| Итак, подведем итог: 1. Cоединение можно использовать, но не внешнее (OUTER LEFT JOIN, OUTER LEFT JOIN). 2. Пересечение таблиц (CROSS JOIN) тоже нельзя использовать. 3. Объединение (UNION) - нельзя. 4. Внутренее соединение (INNER JOIN) можно. Правильно? И еще, расшифруй тогда что такое "Явное соединение таблиц". |
| Автор: 4ybaka 18.10.2007, 20:47 | ||
| да,все правильно http://technet.microsoft.com/ru-ru/library/ms174149.aspx
по поводу 1 и 2 пункта - эти соединения встречаются немного позже... |
| Автор: Servena 19.10.2007, 08:33 | ||||
Еще раз повторюсь:
Мне просто интересно, как можно назвать старый синтаксис "неявным" соединением, а стандартный синтаксис - явным?! И где это изучают перекрестное соединения, начиная с устаревшего синтаксиса, а потом уже учат стандартный? В любой книге приводится сначала стандартный синтаксис а потом в качестве обзора - устаревший, чтобы люди не конфузились, если вдруг его повстречают. Ну да ладно, хвала нашим преподавателям! Не знаю как это сделать с помощью перекрестного соединения - буду с нетерпением ждать, может у кого получится. |