Я понятия не имею, как озаглавить это, так что извините, если название не имеет смысла. Я очень озадачен этим упражнением, это часть схемы базы данных:
- Bars (BarID, Name)
- Drinks (DrinkID, Name, TypeID)
- Продажи (BarID, DrinkID, Цена)
Моя проблема в том, что мне нужно написать процедуру, которая выбирает ВСЕ столбцы, которые содержат как минимум те же напитки, что и столбец, введенный в процедуру с переменной (например, @barname
).
Например, если в баре А продаются виски и кокс, мне нужно выбрать все бары, в которых продается хотя бы виски и кокс.
Это моя очень сложная попыткас курсором, но я понятия не имею, если мне даже нужно использовать курсор с ним. Я действительно потерян.
ALTER PROCEDURE similar
(@barname AS VARCHAR(30))
AS
BEGIN
SET NOCOUNT ON
DECLARE @db AS INT
SELECT @db = COUNT(*)
FROM Sells
WHERE BarID = (SELECT BarID FROM Bars WHERE Bars.Name = @barname)
SELECT BarID INTO #BarMinDb
FROM Sells
WHERE BarID != (SELECT BarID FROM Bars WHERE Bars.Name = @barname)
GROUP BY BarID
HAVING COUNT(DrinkID) >= @db
DECLARE @rn AS INT
DECLARE kurzor CURSOR FOR
SELECT BarID FROM #barMinDb
OPEN kurzor
FETCH NEXT FROM kurzor INTO @rn
WHILE @@FETCH_STATUS = 0
IF (SELECT DrinkID
FROM Sells
WHERE BarID = @rn) IN (SELECT DrinkID
FROM Sells
WHERE BarID = (SELECT Name FROM Bars
WHERE Bars.Name = @barname)
)
BEGIN
PRINT @rn
END
FETCH NEXT FROM kurzor INTO @rn
CLOSE kurzor
DEALLOCATE kurzor
END
Кроме того, меня просят выбрать их, поэтому я думаю, что мне нужно использовать SELECT, а не печатать их вручную.