Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Задачка на select  [new]
gues_T
Guest
Помогите пжст решить задачку.

3 таблицы
Изделие(кодизд, назв, вид, стоимость)
Деталь(КодДет, Вес, Назв, стоимость)
Состав(кодизд,КодДет,Кол-во)

Необходимо извлечь коды и названия изделий, использующих в точности те детали, которые используются в изд В
17 янв 05, 08:16    [1248572]     Ответить | Цитировать Сообщить модератору
 Re: Задачка на select  [new]
trayal
Member

Откуда: Пенза
Сообщений: 471
declare @SostavB table (
		coddet int primary key
		)

declare @SostavBCount int

insert into @SostavB (coddet)
select stv.coddet
from Izdelie izd
	inner join Sostav stv
		on izd.codizd = stv.codizd
where izd.nazv = 'изд B'

set @SostavBCount = @@rowcount

select izd.codizd, izd.nazv
from Izdelie izd
	inner join Sostav stv
		on izd.codizd = stv.codizd
	left outer join @SostavB stvB
		on stv.coddet = stvB.coddet
group by izd.codizd, izd.nazv
having	(count (stv.coddet) = count (stvB.coddet))
	and (count (stv.coddet) = @SostavBCount)
17 янв 05, 08:45    [1248594]     Ответить | Цитировать Сообщить модератору
 Re: Задачка на select  [new]
YuriAM
Member

Откуда:
Сообщений: 829
Может так лучше ?
SELECT кодизд, назв
(
	SELECT кодизд, 
		назв ,
		Разн_Кол_Дет = ABS (t.Кол-во -  ISNULL(( SELECT Состав.Кол-во from Состав where КодДет=t.КодДет AND кодизд = B ),0) )
	FROM Изделие 
		JOIN Состав t ON t.кодизд=Изделие.кодизд
) tt
Group by кодизд, назв
HAVING SUM( Разн_Кол_Дет) = 0
17 янв 05, 08:52    [1248604]     Ответить | Цитировать Сообщить модератору
 Re: Задачка на select  [new]
YuriAM
Member

Откуда:
Сообщений: 829
Извиняюсь, это запрос выдаст те изделия, которые являються подмножеством множества "B" своим сосотавом.
17 янв 05, 08:55    [1248609]     Ответить | Цитировать Сообщить модератору
 Re: Задачка на select  [new]
YuriAM
Member

Откуда:
Сообщений: 829
Сами через UNION можете внутри для каждого изделия, состав расширить до дополнения 'B' .
17 янв 05, 08:59    [1248616]     Ответить | Цитировать Сообщить модератору
 Re: Задачка на select  [new]
trayal
Member

Откуда: Пенза
Сообщений: 471
А надо ли учитывать кол-во?
Из постановки задачи не ясно.
17 янв 05, 09:03    [1248624]     Ответить | Цитировать Сообщить модератору
 Re: Задачка на select  [new]
gues_T
Guest
Спасибо.
]Извиняюсь, но забыл сказать. Задачка предполагает решение одним запросом, и должна решаться на "чистом" SQL...
17 янв 05, 09:05    [1248628]     Ответить | Цитировать Сообщить модератору
 Re: Задачка на select  [new]
trayal
Member

Откуда: Пенза
Сообщений: 471
Вот, если нужно сравнение еще и по кол-ву:
declare @SostavB table (
		coddet int primary key,
		kolvo int
		)

declare @SostavBCount int

insert into @SostavB (coddet, kolvo)
select stv.coddet, stv.kolvo
from Izdelie izd
	inner join Sostav stv
		on izd.codizd = stv.codizd
where izd.nazv = 'изд B'

set @SostavBCount = @@rowcount

select izd.codizd, izd.nazv
from Izdelie izd
	inner join Sostav stv
		on izd.codizd = stv.codizd
	left outer join @SostavB stvB
		on (stv.coddet = stvB.coddet)
		and (stv.kolvo = stvB.kolvo)
group by izd.codizd, izd.nazv
having	(count (stv.coddet) = count (stvB.coddet))
	and (count (stv.coddet) = @SostavBCount)
17 янв 05, 09:08    [1248633]     Ответить | Цитировать Сообщить модератору
 Re: Задачка на select  [new]
gues_T
Guest
Не очень понял про количество...
Имеется ввиду, что необходимо вывести изделия, детали которых являются подмножеством множества деталей входящих в изд. В
17 янв 05, 09:10    [1248635]     Ответить | Цитировать Сообщить модератору
 Re: Задачка на select  [new]
trayal
Member

Откуда: Пенза
Сообщений: 471
автор
Необходимо извлечь коды и названия изделий, использующих в точности те детали, которые используются в изд В

и
автор
необходимо вывести изделия, детали которых являются подмножеством множества деталей входящих в изд. В

Мне кажется, это немного разные вещи, а ??
17 янв 05, 09:13    [1248639]     Ответить | Цитировать Сообщить модератору
 Re: Задачка на select  [new]
Taffy
Member

Откуда:
Сообщений: 20501
Ребята, вы тут производственные проблемы решаете, а у человека всего лишь сессия и он свою лабу решает за ваш счет. ;)
2 gues_T учите матчасть.
17 янв 05, 09:15    [1248643]     Ответить | Цитировать Сообщить модератору
 Re: Задачка на select  [new]
gues_T
Guest
trayal
автор
Необходимо извлечь коды и названия изделий, использующих в точности те детали, которые используются в изд В

и
автор
необходимо вывести изделия, детали которых являются подмножеством множества деталей входящих в изд. В

Мне кажется, это немного разные вещи, а ??


Нда... Заставил задуматься:) В любом случае, задачка требует решения одним запросом, а не средствами QA.
Хрен редьки не слаще... Решить бы хоть для одного из случаев.
17 янв 05, 09:20    [1248651]     Ответить | Цитировать Сообщить модератору
 Re: Задачка на select  [new]
Taffy
Member

Откуда:
Сообщений: 20501
gues_T
В любом случае, задачка требует решения одним запросом, а не средствами QA.

??????????????
И вообще. Хотите, чтобы Вам лабу решили - оформите вопрос согласно правилам, висящим в самом начале форума.
17 янв 05, 09:34    [1248685]     Ответить | Цитировать Сообщить модератору
 Re: Задачка на select  [new]
trayal
Member

Откуда: Пенза
Сообщений: 471
автор
требует решения одним запросом, а не средствами QA

Да, сильно сказано...
автор
Решить бы хоть для одного из случаев

То есть все равно, что требуется?! Сделаем, как получится?! Главное, чтобы в начале оператор SELECT стоял?!


Свалил первый вариант в один запрос:
select izd.codizd, izd.nazv
from Izdelie izd
	inner join Sostav stv
		on izd.codizd = stv.codizd
	left outer join 
		(select stv.coddet
		from Izdelie izd
			inner join Sostav stv
				on izd.codizd = stv.codizd
		where izd.nazv = 'изд B'
		) stvB
		on stv.coddet = stvB.coddet
group by izd.codizd, izd.nazv
having	(count (stv.coddet) = count (stvB.coddet))
	and (
		count (stv.coddet) = count(select stv.coddet
					from Izdelie izd
						inner join Sostav stv
						on izd.codizd = stv.codizd
					where izd.nazv = 'изд B')
	)
17 янв 05, 09:35    [1248691]     Ответить | Цитировать Сообщить модератору
 Re: Задачка на select  [new]
Павел Воронцов
Member

Откуда: Новосибирск
Сообщений: 2386
Блог
gues_T
Спасибо.
]Извиняюсь, но забыл сказать. Задачка предполагает решение одним запросом, и должна решаться на "чистом" SQL...
Сударь, не морочьте людям головы. Так и скажите "пацаны, валюсь на экзамене, спасите-помогите!"
17 янв 05, 09:36    [1248695]     Ответить | Цитировать Сообщить модератору
 Re: Задачка на select  [new]
gues_T
Guest
Павел Воронцов
gues_T
Спасибо.
]Извиняюсь, но забыл сказать. Задачка предполагает решение одним запросом, и должна решаться на "чистом" SQL...
Сударь, не морочьте людям головы. Так и скажите "пацаны, валюсь на экзамене, спасите-помогите!"

Попросили помочь "пацаны, человек валится на экзамене, спасите-помогите!":) Самому интересно стало:)
17 янв 05, 09:40    [1248705]     Ответить | Цитировать Сообщить модератору
 Re: Задачка на select  [new]
Павел Воронцов
Member

Откуда: Новосибирск
Сообщений: 2386
Блог
gues_T
Попросили помочь "пацаны, человек валится на экзамене, спасите-помогите!":) Самому интересно стало:)
Просто сам люблю такие задачки на экзамене давать. Реляционное деление - ослиный мостик,после прохождения которого студент у меня имеет шанс тут же пойти счастливым. Среди приведённых ответов нет правильного )
17 янв 05, 14:55    [1250025]     Ответить | Цитировать Сообщить модератору
 Re: Задачка на select  [new]
gues_T
Guest
Павел Воронцов
gues_T
Попросили помочь "пацаны, человек валится на экзамене, спасите-помогите!":) Самому интересно стало:)
Просто сам люблю такие задачки на экзамене давать. Реляционное деление - ослиный мостик,после прохождения которого студент у меня имеет шанс тут же пойти счастливым. Среди приведённых ответов нет правильного )


Так может быть поможете, а? Экзамен прошел, поздняк метаться... А правильное решение знать охота... Очень-очень...
17 янв 05, 15:19    [1250167]     Ответить | Цитировать Сообщить модератору
 Re: Задачка на select  [new]
Павел Воронцов
Member

Откуда: Новосибирск
Сообщений: 2386
Блог
To gues_TВоспользуйтесь поиском. Ответы ждут Вас щедрой россыпью...
17 янв 05, 15:27    [1250209]     Ответить | Цитировать Сообщить модератору
 Re: Задачка на select  [new]
trayal
Member

Откуда: Пенза
Сообщений: 471
Павел Воронцов
Среди приведённых ответов нет правильного

Чтобы дать правильный ответ, нужно, как минимум, иметь правильный вопрос.
Автор же так и не смог ответить на две вещи:
1) играет ли здесь роль поле "кол-во"
2) все-же надо, чтобы изделия использовали "в точности все детали" либо просто "из подмножества деталей изделия В".

В своем первом решении я выбрал те изделия, которые используют все детали изделия В, и только их.
Мне хотелось бы продолжить топик исключительно из чувства самообразования и узнать, почему ответ неверный.
Хотя бы укажите на ошибку, если не затруднит. :)
17 янв 05, 18:37    [1251261]     Ответить | Цитировать Сообщить модератору
 Re: Задачка на select  [new]
gues_T
Guest
А ответа верного все нет...
19 янв 05, 07:42    [1255588]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить