Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SQL-запрос, соединение таблиц..почти.. / 10 сообщений из 10, страница 1 из 1
12.07.2012, 18:21
    #37877169
Kozel_otpucti
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL-запрос, соединение таблиц..почти..
Доброго времени суток.
У меня возникла проблема, поэтому я прошу вашей помощи.
Словами объяснить что надо я не могу, поэтому спрошу на примере:
Дана таблица:

Город_________Фамилия владельца____Тип телефона___номер
(название)_____(фамилия)_____________(сот/дом)____(номер)
Москва_______Иванов________________сотовый_______111
Москва_______Иванов________________домашний______222
Киров________Иванов________________сотовый________333
Орел_________Сидоров_______________сотовый_______444
Орел_________Сидоров_______________домашний_____555

Из нее надо получить следующую таблицу:

Город__________Фамилия__________сотовый__________домашний
(название)______(фамилия)__________(номер)________(номер)
Москва__________Иванов_____________111____________222
Киров__________Иванов_______________333___________null
Орел___________Сидоров______________444__________555


Как выцеплять данные из таблицы я поняла, но когда я ее объединяю через unit, то получается следующее:

Город__________Фамилия__________ сотовый__________домашний
(название)_____(фамилия)__________(номер)__________(номер)
Москва________ Иванов______________111_____________null
Москва________Иванов_______________null_____________222
Киров_________ Иванов______________333_____________null
Орел__________Сидоров_____________444_____________null
Орел__________Сидоров_____________null_____________555

Получаю я такую таблицу таким образом:
Код: sql
1.
2.
3.
select база_данных_городов.Город, база_данных_фамилий.фамилия, запрос1.номер from база_данных_городов, база_данных_фамилий, база_данных_соответствий, (select тип.телефона, номер.телефона 
from база_данных_соответствий, база_данных_городов, база_данных_фамилий 
where база_данных_соответствий.код_города=база_данных_городов.город and база_данных_соответствий.индификатор_владельца=база_данных_фамилий.фамилия and база_данных_соответствий.тип_телефона='сотовый')запрос1


- так я полчаю телефоны сотоые, аналогично домашние, но вот как наложить данные друг на друга, как требуется я не знаю.
Помогите пожалуйста, срочно надо.
...
Рейтинг: 0 / 0
12.07.2012, 18:47
    #37877202
Baddy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL-запрос, соединение таблиц..почти..
Kozel_otpucti,

PIVOT , если версия сервера позволяет
...
Рейтинг: 0 / 0
12.07.2012, 18:53
    #37877212
Kozel_otpucti
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL-запрос, соединение таблиц..почти..
Baddy,

Спасибо большое.

Я это дело творю на SQL Server 2008, потянет?
...
Рейтинг: 0 / 0
12.07.2012, 19:17
    #37877232
Baddy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL-запрос, соединение таблиц..почти..
Kozel_otpucti,

потянет
...
Рейтинг: 0 / 0
13.07.2012, 12:19
    #37877922
AZv
AZv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL-запрос, соединение таблиц..почти..
Если у каждого владельца не более 1 телефона данного типа, то проще без PIVOT:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
CREATE TABLE SomeTable
(
CityName	varchar(63) NOT NULL,
OwnerName	varchar(63) NOT NULL,
PhoneType	char(3)	NOT NULL,
PhoneNumber	char(15) NOT NULL
)

INSERT
INTO SomeTable (CityName, OwnerName, PhoneType, PhoneNumber)
VALUES	('Москва', 'Иванов', 'дом', '(111)222-33-44'),
		('Москва', 'Иванов', 'сот', '(111)555-66-77'),
		('Москва', 'Петров', 'дом', '(111)123-45-67'),
		('Москва', 'Петров', 'сот', '(111)999-99-99'),
		('Москва', 'Рахмутдинов', 'сот', '(111)000-00-00'),
		('Киров', 'Сидоров', 'дом', '(2222)22-33-44'),
		('Орел', 'Васильев', 'сот', '(2222)22-33-55'),
		('Орел', 'Николаев', 'сот', '(2222)22-33-66'),
		('Жмеринка', 'Петренко', 'дом', '(3333)2-33-44'),
		('Жмеринка', 'Петренко', 'сот', '(3333)2-33-44'),
		('Жмеринка', 'Остапчук', 'сот', '(3333)4-33-44'),
		('Бобруйск', 'Павлов', 'дом', '(0)1'),
		('Бобруйск', 'Семенов', 'сот', '(0)2')
		
SELECT DISTINCT T0.CityName AS [Город], T0.OwnerName AS [Владелец], T1.PhoneNumber AS [Домашний тел. ], T2.PhoneNumber AS [Мобильный тел. ]
FROM SomeTable T0
LEFT JOIN SomeTable T1	ON   T1.CityName = T0.CityName
			AND  T1.OwnerName = T0.OwnerName
			AND  T1.PhoneType = 'дом'
LEFT JOIN SomeTable T2	ON   T2.CityName = T0.CityName
			AND  T2.OwnerName = T0.OwnerName
			AND  T2.PhoneType = 'сот'
...
Рейтинг: 0 / 0
13.07.2012, 13:07
    #37878055
мимо
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL-запрос, соединение таблиц..почти..
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
declare  @SomeTable TABLE
(
CityName	varchar(63) NOT NULL,
OwnerName	varchar(63) NOT NULL,
PhoneType	char(3)	NOT NULL,
PhoneNumber	char(15) NOT NULL
)

INSERT
INTO @SomeTable (CityName, OwnerName, PhoneType, PhoneNumber)
VALUES	('Москва', 'Иванов', 'дом', '(111)222-33-44'),
		('Москва', 'Иванов', 'сот', '(111)555-66-77'),
		('Москва', 'Петров', 'дом', '(111)123-45-67'),
		('Москва', 'Петров', 'сот', '(111)999-99-99'),
		('Москва', 'Рахмутдинов', 'сот', '(111)000-00-00'),
		('Киров', 'Сидоров', 'дом', '(2222)22-33-44'),
		('Орел', 'Васильев', 'сот', '(2222)22-33-55'),
		('Орел', 'Николаев', 'сот', '(2222)22-33-66'),
		('Жмеринка', 'Петренко', 'дом', '(3333)2-33-44'),
		('Жмеринка', 'Петренко', 'сот', '(3333)2-33-44'),
		('Жмеринка', 'Остапчук', 'сот', '(3333)4-33-44'),
		('Бобруйск', 'Павлов', 'дом', '(0)1'),
		('Бобруйск', 'Семенов', 'сот', '(0)2')
		

select CityName , OwnerName  ,  [дом] as [Домашний тел. ] , [сот] AS [Мобильный тел. ]
from 
(
select *				
from @SomeTable					
) as d
pivot (
max (PhoneNumber) for PhoneType in ([дом] , [сот])) as z 
order by CityName, OwnerName			
...
Рейтинг: 0 / 0
13.07.2012, 16:14
    #37878554
MaxiMaxiM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL-запрос, соединение таблиц..почти..
Я учусь писать сккрипты в Oracle. Уже использовал with, create table, view, но параллено смотрю и MySQL
Скажите пожалуйста, что означает конструкция
Код: plsql
1.
declare  @SomeTable TABLE
...
Рейтинг: 0 / 0
13.07.2012, 16:21
    #37878570
Shakill
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL-запрос, соединение таблиц..почти..
MaxiMaxiMЯ учусь писать сккрипты в Oracle. Уже использовал with, create table, view, но параллено смотрю и MySQL
Скажите пожалуйста, что означает конструкция
Код: plsql
1.
declare  @SomeTable TABLE



в mysql нет такой конструкции, вы смотрите форум по ms sql server
...
Рейтинг: 0 / 0
13.07.2012, 16:45
    #37878634
MaxiMaxiM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL-запрос, соединение таблиц..почти..
Shakill,
ой я и хотел написать MsSQL
...
Рейтинг: 0 / 0
13.07.2012, 20:11
    #37878903
Mnior
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL-запрос, соединение таблиц..почти..
автор
Код: sql
1.
2.
3.
4.
5.
6.
7.
declare  @SomeTable TABLE
(
CityName	varchar(63) NOT NULL,
OwnerName	varchar(63) NOT NULL,
PhoneType	char(3)	NOT NULL,
PhoneNumber	char(15) NOT NULL
)

Это табличная переменная. Нет аналогов.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SQL-запрос, соединение таблиц..почти.. / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]