Я пытаюсь выбрать отдельные даты бронирования по количеству дат бронирования для каждой даты. Мне нужно сравнить лицензионный ключ от таблицы reservation date
до LicenseKeyTB
.T-SQL: выбор нескольких столбцов с отличным значением
Это то, что я до сих пор:
SELECT
l.LicenseKey,
numOfReservation
FROM
RX.LicenseKeyTB l
JOIN (
SELECT
r.LicenseKey,
DISTINCT r.ReservationDate,
COUNT(r.ReservationDate)
OVER (PARTITION BY r.ReservationDate ORDER BY r.LicenseKey) as numOfRes
FROM
RX.ReservationTB r
) AS ReservatonDateCount
ON ReservatonDateCount.LicenseKey = l.LicenseKey;
Я получаю следующее сообщение об ошибке:
Column 'RX.ReservationTB.LicenseKey' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
EDIT ----------- ---
Извините, я не дал изображения полностью. Я пытаюсь проверить, доступен ли лицензионный ключ для определенного диапазона дат. Для диапазона дат я не могу пережить количество всех мест, которые у меня есть для лицензионного ключа s. Для Office 2010 есть лицензионный ключ, а для Office 2013 есть еще один. Для обоих лицензионных ключей имеется общее количество мест. Я не могу пройти через множество мест. например Я не могу сразу получить 5 лицензий Office 2010 и 8 Office 2013, но у меня могут быть 4 и 6.
Мне нужно запросить лицензионный ключ для продукта (например, Office 2010), где общее количество резервирований для диапазон дат не превышает количество доступных мест для обоих лицензионных ключей.
Мне нужно проверить соответствующий лицензионный ключ, если диапазон дат резервирования достигнет общего количества мест.
Нарушение этого до:
Первое, что нужно сделать, это посмотреть, сколько оговорок у меня есть для данного диапазона на лицензионный ключ.
-- number of reservations per day for a license key
SELECT
l.LicenseKey,
l.ReservationDate,
COUNT(1) AS numOfReservation
FROM RX.ReservationTB l
WHERE l.LicenseKey = '6RCX3-H722D-8MQT6-8Y2VC-FY9FG'
AND CONVERT(date, '20151130')<=l.ReservationDate
AND l.ReservationDate<CONVERT(date, '20151205')
GROUP BY l.LicenseKey, l.ReservationDate
ORDER BY l.LicenseKey, l.ReservationDate
- Мне не нужен список лицензионных ключей продукта, доступных для данного диапазона дат.
....
Вот что я до сих пор:
SELECT
p.Name,
s.SeatsTotal,
COUNT(1) AS numOfReservation
FROM RX.ProductTB p
JOIN RX.LicenseKeyTB l ON p.ProductID=l.LicenseKey
JOIN RX.SeatsAvailableTB s ON l.SeatID=s.SeatID
JOIN RX.ReservationTB r ON r.LicenseKey=l.LicenseKey
WHERE CONVERT(date, '20151130')<=r.ReservationDate
AND r.ReservationDate<CONVERT(date, '20151205')
GROUP BY p.Name, s.SeatsTotal
Я получаю сообщение об ошибке:
Msg 245, Level 16, State 1, Line 1
Conversion failed when converting the nvarchar value '6RCX3-H722D-8MQT6-8Y2VC-FY9FG' to data type int.
'DISTINCT' только когда-либо применяется к ** всей строке ** - вы не можете получить« отличные »значения столбцов. Синтаксис: 'SELECT DISTINCT (список столбцов)' (ключевое слово 'DISTINCT' не может находиться в середине списка столбцов) –
Можете ли вы предоставить образцы данных и желаемые результаты? В дополнение к неправильному использованию 'distinct', вы отправили сообщение об ошибке, потому что вы не можете использовать' order by' в разделе 'partition' при использовании' count' - ничего не заказывать со счетом ... – sgeddes
'DISTINCT' не является классификатором для столбцов, это модификатор для 'SELECT'. Вы либо «SELECT DISTINCT», либо просто «SELECT» [не обязательно разные]. –