Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> отображение результата 
:(
    Опции темы
4ybaka
Дата 15.10.2007, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 28.4.2007

Репутация: нет
Всего: нет



нужно в зависимости от результата запроса в одном столбце вывести либо столбец из одной таблицы,либо столбец из другой.как это можно реализовать?


--------------------
"То,что вы понимаете - это все,что вы понимаете."
 Брайн Керниган
PM MAIL WWW   Вверх
SergKO
Дата 16.10.2007, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 14.3.2005

Репутация: 17
Всего: 20



используйте CASE
PM MAIL   Вверх
4ybaka
Дата 16.10.2007, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 28.4.2007

Репутация: нет
Всего: нет



уже пробовал,но опыта пока для этого не хватает... smile 


--------------------
"То,что вы понимаете - это все,что вы понимаете."
 Брайн Керниган
PM MAIL WWW   Вверх
SergKO
Дата 16.10.2007, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 14.3.2005

Репутация: 17
Всего: 20



Приведите запрос, и покажите из каких полей надо выбирать.
PM MAIL   Вверх
4ybaka
Дата 16.10.2007, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 28.4.2007

Репутация: нет
Всего: нет



Цитата

Найти покупателей и продавцов, которые живут в одном городе. Если в городе живут только один или 
несколько продавцов или только один или несколько покупателей, то информация о таких покупателя и продавцах не 
должна попадать в результирующий набор. Не использовать конструкцию JOIN. 
В результатах запроса необходимо вывести следующие заголовки для результатов запроса: ‘Person’, ‘Type’ 
(здесь надо выводить строку ‘Customer’ или  ‘Seller’ в завимости от типа записи), ‘City’. 

база NorthWind
у меня запрос получился такой:
Код

select E.LastName,C.ContactName,E.City from Customers C,Employees E where C.City=E.City 

но в нем вместо E.LastName и C.ContactName нужно вывести один столбец ‘Person’,значение в кот либо из E.LastName либо из C.ContactName.и еще добавить столбец ‘Type’,кот также необходимо заполнить как указано выше.


--------------------
"То,что вы понимаете - это все,что вы понимаете."
 Брайн Керниган
PM MAIL WWW   Вверх
SergKO
Дата 17.10.2007, 06:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 14.3.2005

Репутация: 17
Всего: 20



Очень похоже на упражнение на sql-ex. Давайте так, полностью Вы запрос напишите сами, а пример использования CASE вот
Код

select Person = case    when E.LastName is null and C.ContactName is not null then C.ContactName 
            when E.LastName is not null and C.ContactName is null then E.LastName
            else ''
        end,
    Type =    case    when E.LastName is null and C.ContactName is not null then 'Customer'
            when E.LastName is not null and C.ContactName is null then 'Seller'
            else ''
        end
        ,E.City 
from Customers C,Employees E where C.City=E.City 

PM MAIL   Вверх
4ybaka
Дата 17.10.2007, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 28.4.2007

Репутация: нет
Всего: нет



на сколько я знаю,при таком соединении таблиц(скалярное произведение вроде) у нас в каждой строчке будет и E.LastName и C.ContactName,те ни один из них не будет is null.значит всегда будет выводиться пустая строка...подскажите хотя бы в какую сторону копать.


--------------------
"То,что вы понимаете - это все,что вы понимаете."
 Брайн Керниган
PM MAIL WWW   Вверх
Servena
Дата 17.10.2007, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 24.7.2007
Где: Днепропетровск

Репутация: 10
Всего: 14



Использую Northwind, попробуй так:
Код

SELECT c.ContactName AS Person, 'Customer' AS Type,c.City AS City
FROM Customers AS c
WHERE EXISTS (
              SELECT e.City 
              FROM Employees AS e
              WHERE e.City=c.City
              )
UNION ALL
SELECT e.FirstName+' '+e.LastName AS Person, 'Seller' AS Type,e.City AS City
FROM Employees AS e
WHERE EXISTS (
              SELECT c.City 
              FROM Customers AS c
              WHERE e.City=c.City
              )

И не использовать JOIN - это не значит использовать старый синтаксис соединения, я думаю. 
В скором будущем сервера БД не будут его поддерживать, а будут использовать ANSI стандарт.

Добавлено через 23 секунды
Использую Northwind, попробуй так:
Код

SELECT c.ContactName AS Person, 'Customer' AS Type,c.City AS City
FROM Customers AS c
WHERE EXISTS (
              SELECT e.City 
              FROM Employees AS e
              WHERE e.City=c.City
              )
UNION ALL
SELECT e.FirstName+' '+e.LastName AS Person, 'Seller' AS Type,e.City AS City
FROM Employees AS e
WHERE EXISTS (
              SELECT c.City 
              FROM Customers AS c
              WHERE e.City=c.City
              )

И не использовать JOIN - это не значит использовать старый синтаксис соединения, я думаю. 
В скором будущем сервера БД не будут его поддерживать, а будут использовать ANSI стандарт.

Добавлено через 3 минуты и 8 секунд
Два раза одно и тоже - это глюкануло, не отправлялось долго и т.д. 
PM MAIL   Вверх
4ybaka
Дата 17.10.2007, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 28.4.2007

Репутация: нет
Всего: нет



Servena, спасибо за помощь,но я виноват,надо было сразу все ограничения дать... smile 
вообщем тема задания была такая:
Цитата

Явное соединение таблиц, самосоединения, использование агрегатных функций и предложений GROUP BY и HAVING 

так что union здесь использовать нельзя.я тоже хотел smile 



--------------------
"То,что вы понимаете - это все,что вы понимаете."
 Брайн Керниган
PM MAIL WWW   Вверх
Servena
Дата 18.10.2007, 06:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 24.7.2007
Где: Днепропетровск

Репутация: 10
Всего: 14



Ну так а в предыдущих примерах использовалось тоже соединение, но только оно написано в станом синтаксисе(без слова джоин). Какая разница?! Но я еще подумаю над этим. А временные таблицы использовать можно?
PM MAIL   Вверх
Servena
Дата 18.10.2007, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 24.7.2007
Где: Днепропетровск

Репутация: 10
Всего: 14



Так, после разговора с "экспертами" можно с уверенность сказать, что использовать данные с двух разных таблиц, не использую соединения 
их - невозможно. 
Теперь нужно разобраться с условием задачи: Явное соединение таблиц, самосоединения, ... - что это значит? А что есть не явное соединение? Или не так, используя синтаксис типа: from Customers C,Employees E - можно ли его назвать неявным соединением? Я думаю что нет, поскольку это обычный синтаксис MS SQL до 6.5 версии, другого тогда не было, т.е. это обычная старая (явная) запись объединения(методом пересечения, в стандарте ANSI это называется CROSS JOIN).
Таким образом прихожу к заключению - нужно уточнить условие задачи, т.е. расшифровать, что значит "неявное" соединение, потому что без  соединения тут не обойтись.
PM MAIL   Вверх
4ybaka
Дата 18.10.2007, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 28.4.2007

Репутация: нет
Всего: нет



 smile 
Цитата(Servena @  18.10.2007,  09:51 Найти цитируемый пост)
т.е. расшифровать, что значит "неявное" соединение

точно не знаю, есть ли вообще такое...)в задании сказано:
Цитата

Явное соединение таблиц


Цитата(Servena @  18.10.2007,  09:51 Найти цитируемый пост)
Так, после разговора с "экспертами" можно с уверенность сказать, что использовать данные с двух разных таблиц, не использую соединения их - невозможно. 

их соединять можно,даже нужно.просто ограничения по поводу join относятся к outer join и другим доп-ым возможностям.

Цитата(Servena @  18.10.2007,  06:35 Найти цитируемый пост)
 А временные таблицы использовать можно?

нет


--------------------
"То,что вы понимаете - это все,что вы понимаете."
 Брайн Керниган
PM MAIL WWW   Вверх
Servena
Дата 18.10.2007, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 24.7.2007
Где: Днепропетровск

Репутация: 10
Всего: 14



Итак, подведем итог: 
1. Cоединение можно использовать, но не внешнее (OUTER LEFT JOIN, OUTER LEFT JOIN).
2. Пересечение таблиц (CROSS JOIN) тоже нельзя использовать.
3. Объединение (UNION) - нельзя.
4. Внутренее соединение (INNER JOIN) можно.
Правильно?

И еще, расшифруй тогда что такое  "Явное соединение таблиц".
PM MAIL   Вверх
4ybaka
Дата 18.10.2007, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 28.4.2007

Репутация: нет
Всего: нет



да,все правильноsmile

вот
Цитата

При использовании явного синтаксиса JOIN результат JOIN будет явным. Если в предложении FROM имеется список таблиц, разделенных запятыми, это неявное объединение таблиц векторным произведением.


по поводу 1 и 2 пункта - эти соединения встречаются немного позже...


--------------------
"То,что вы понимаете - это все,что вы понимаете."
 Брайн Керниган
PM MAIL WWW   Вверх
Servena
Дата 19.10.2007, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 24.7.2007
Где: Днепропетровск

Репутация: 10
Всего: 14



Еще раз повторюсь:
Код
...FROM table1, table2 ...
 это все равно что 
Код
...FROM table1 CROSS JOIN table2...

Мне просто интересно, как можно назвать старый синтаксис "неявным" соединением, а стандартный синтаксис - явным?! И где это
изучают перекрестное соединения, начиная с устаревшего синтаксиса, а потом уже учат стандартный? В любой книге приводится
сначала стандартный синтаксис а потом в качестве обзора - устаревший, чтобы люди не конфузились, если вдруг его повстречают.
Ну да ладно, хвала нашим преподавателям!
Не знаю как это сделать с помощью перекрестного соединения - буду с нетерпением ждать, может у кого получится.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0612 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.