Пытаюсь вернуть минимальную и максимальную цены по системе бронирования вилл. У меня есть справочная таблица, в которой хранится цена за каждую неделю для каждой виллы.
Я использую функции min и max, чтобы сделать это в пределах выбора, но у меня много проблем. Может ли кто-нибудь объяснить, в чем я ошибаюсь? Вот зр
ALTER PROCEDURE spVillaGet
-- Add the parameters for the stored procedure here
@accomodationTypeFK int = null,
@regionFK int = null,
@arrivalDate datetime = null,
@numberOfNights int = null,
@sleeps int = null,
@priceFloor money = null,
@priceCeil money = null
КАК НАЧИНАТЬ - Добавлен SET NOCOUNT ON, чтобы предотвратить появление дополнительных наборов результатов. - вмешательство в операторы SELECT. УСТАНОВИТЬ NOCOUNT ON;
-- Insert statements for procedure here
SELECT tblVillas.name,
tblVillas.introduction,
tblVillas.italian_introduction,
tblVillas.uk_content,
tblVillas.italian_content,
tblVillas.sleeps,
tblVillas.postcode,
tblLkUpRegions.regionName,
tblLkUpAccomodationTypes.accomodationType,
MIN(price) As MinPrice,
MAX(price) As MaxPrice
FROM tblVillas
LEFT JOIN tblLkUpRegions on tblVillas.regionFK = tblLkUpRegions.regionID
LEFT JOIN tblLkUpAccomodationTypes on tblVillas.accomodationTypeFK = tblLkUpAccomodationTypes.accomodationId
LEFT JOIN tblWeeklyPrices on tblWeeklyPrices.villaFK = tblVillas.villaId
WHERE
((@accomodationTypeFK is null OR accomodationTypeFK = @accomodationTypeFK)
AND (@regionFK is null OR regionFK = @regionFK)
AND (@sleeps is null OR sleeps = @sleeps)
AND tblVillas.deleted = 0)
GROUP BY tblVillas.name
С какими проблемами, ошибками вы столкнулись?


Вы не уточняете проблемы какие, которые у вас возникают, но это, вероятно, одна из них: вам нужно указать все неагрегированные столбцы в предложении GROUP BY, то есть:
GROUP BY tblVillas.name,
tblVillas.introduction,
tblVillas.italian_introduction,
tblVillas.uk_content,
tblVillas.italian_content,
tblVillas.sleeps,
tblVillas.postcode,
tblLkUpRegions.regionName,
tblLkUpAccomodationTypes.accomodationType
Из вашего последующего комментария видно, что некоторые из ваших столбцов имеют тип данных, который нельзя использовать в предложении GROUP BY. Попробуйте вместо этого:
SELECT tblVillas.name,
tblVillas.introduction,
tblVillas.italian_introduction,
tblVillas.uk_content,
tblVillas.italian_content,
tblVillas.sleeps,
tblVillas.postcode,
tblLkUpRegions.regionName,
tblLkUpAccomodationTypes.accomodationType,
(SELECT MIN(price) FROM tblWeeklyPrices where tblWeeklyPrices.villaFK = tblVillas.villaId) As MinPrice,
(SELECT MAX(price) FROM tblWeeklyPrices where tblWeeklyPrices.villaFK = tblVillas.villaId) As MaxPrice
FROM tblVillas
LEFT JOIN tblLkUpRegions on tblVillas.regionFK = tblLkUpRegions.regionID
LEFT JOIN tblLkUpAccomodationTypes on tblVillas.accomodationTypeFK = tblLkUpAccomodationTypes.accomodationId
WHERE
((@accomodationTypeFK is null OR accomodationTypeFK = @accomodationTypeFK)
AND (@regionFK is null OR regionFK = @regionFK)
AND (@sleeps is null OR sleeps = @sleeps)
AND tblVillas.deleted = 0)
Спасибо за вашу помощь
Когда я группирую по и включаю все столбцы из выбора, кроме двух функций, я получаю следующую ошибку
Msg 306, Level 16, State 2, Procedure spVillaGet, Line 22
Типы данных text, ntext и image нельзя сравнивать или сортировать, за исключением случаев использования оператора IS NULL или LIKE. Сообщение 306, уровень 16, состояние 2, процедура spVillaGet, строка 22 Типы данных text, ntext и image нельзя сравнивать или сортировать, за исключением случаев использования оператора IS NULL или LIKE.
Я обновил свой ответ по этому поводу. NB, вам не следует отправлять «ответ», чтобы прояснить ваш вопрос - вам следует обновить вопрос и / или прокомментировать мой ответ.
У него еще нет представителя, который мог бы публиковать комментарии, но вы правы, что было бы лучше изменить его вопрос.
Нужны более подробные сведения о том, какую ошибку вы получаете