powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вывод значений двух таблиц в общую таблицу
3 сообщений из 3, страница 1 из 1
Вывод значений двух таблиц в общую таблицу
    #39826846
eleau
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица клиента:

Код: sql
1.
2.
3.
4.
5.
6.
7.
Create table Klient
(
	nomer_klienta int not Null Primary Key ,
	familia varchar(20),
	imya varchar(20),
	otchestvo varchar(20)
);



Таблица материалов (песчаный замок, например, каменная плитка)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
Create table Materials
(	
	Kod_materiala int not Null Primary Key,
	Kod_Type_materiala int not Null,
	Nazvanie_materiala varchar(20) not Null,
	CONSTRAINT FK_Materials_Type_materiala 
		FOREIGN KEY (Kod_type_materiala) REFERENCES Type_materiala(Kod_type_materiala)
);



Таблица типов материала (тип материала может быть или камень или песок)

Код: sql
1.
2.
3.
4.
5.
6.
7.
Create table Type_materiala 
(
	Kod_type_materiala int not Null Primary Key,
	Nazvanie_type_materiala varchar(20) not Null default 'pesok',
	UNIQUE (Nazvanie_type_materiala ),
	CHECK (Nazvanie_type_materiala IN ('pesok', 'kamen'))
);



и таблица сделок с клиентами

Код: 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.
Create table Sdelki
(
	Kod_sdelki int not Null Primary Key,
	nomer_klienta int not Null,
	CONSTRAINT FK_Sdelki_Klient
		FOREIGN KEY (nomer_klienta ) REFERENCES Klient(nomer_klienta ),
	kolichestvo real CHECK (kolichestvo>0),

	Kod_materiala int not Null,
	CONSTRAINT FK_Sdelki_Materials
		FOREIGN KEY (Kod_materiala ) REFERENCES Materials(Kod_materiala ),

	Kod_type_materiala int not Null,
	CONSTRAINT FK_Sdelki_Kod_type_materiala 
		FOREIGN KEY (Kod_type_materiala ) REFERENCES Materials(Kod_type_materiala ),

	napravlenie_sdelki varchar(10) not Null default 'long' 
		CHECK (napravlenie_sdelki IN ('long', 'short')),
	zena_otkrytiya money CHECK (zena_otkrytiya>0),
	zena_zakrytiya money CHECK (zena_zakrytiya>0),
	pribyl as 
		case 
			when napravlenie_sdelki = 'long' then 
				(zena_zakrytiya-zena_otkrytiya)*kolichestvo
				else (zena_otkrytiya-zena_zakrytiya)*kolichestvo
		end
);



Как сделать, чтобы создалась одна таблица с двумя колонками ('pesok', 'kamen'), в которые записывались 3 самых прибыльных песочных материала и топ 3 каменных соответственно у такого-то клиента??

Сломал голову, один бред получается
SELECT TOP(3) familia, Nazvanie_type_materiala as 'pesok', Nazvanie_type_materiala as 'kamen', pribyl FROM Sdelki
inner join Materials ON Sdelki.Kod_materiala = Materials.Kod_materiala
inner join Klient ON Sdelki.nomer_klienta = Klient.nomer_klienta
inner join Type_materiala ON Sdelki.Kod_type_materiala = Type_materiala.Kod_type_materiala
ORDER BY pribyl DESC

Никакие из полей таблиц не лишние, убирать ничего нельзя, просто сделать из этого таблицу из двух колонок (песок и камень), в которые выводить по три самых прибыльных изделия для каждого клиента (клиент получается третья колонка, или первая)

Буду очень признателен за помощь
...
Рейтинг: 0 / 0
Вывод значений двух таблиц в общую таблицу
    #39826852
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eleau Как сделать, чтобы создалась одна таблица с двумя колонками ('pesok', 'kamen'),
create table ...
eleau в которые записывались 3 самых прибыльных песочных материала и топ 3 каменных соответственно у такого-то клиента??
insert into ... select ...
...
Рейтинг: 0 / 0
Вывод значений двух таблиц в общую таблицу
    #39826857
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевичeleau Как сделать, чтобы создалась одна таблица с двумя колонками ('pesok', 'kamen'),
create table ...
eleau в которые записывались 3 самых прибыльных песочных материала и топ 3 каменных соответственно у такого-то клиента??
insert into ... select ...

Зачем именно таблица?

Код: sql
1.
2.
3.
4.
5.
6.
7.
with t as ( select *, n = row_number() over(partition by nomer_klienta, Kod_type_materiala  order by pribyl desc ) from Sdelki )
   , x as ( select nomer_klienta, Kod_type_materiala, Kod_materiala, n from t where n between 1 and 3 )
   , m as ( select Kod_type_materiala from Type_materiala where Nazvanie_type_materiala = 'pesok' )
   , p as ( select * from x where Kod_type_materiala = ( select Kod_type_materiala from m) )
   , k as ( select * from x where Kod_type_materiala <> ( select Kod_type_materiala from m) )
   select p.*, k.*
     from p full outer join k on p.nomer_klienta = k.nomer_klienta and p.n = k.n
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вывод значений двух таблиц в общую таблицу
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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