У меня есть две таблицы, к которым я хочу присоединиться. Первая таблица называется WorkItem
:SQL Server INNER JOIN with GROUP BY
вторая таблица WorkItem_Schedule
:
Я хочу, чтобы получить первый присоединился ряд с ActualEndDate IS NULL
.
В случае WorkItemId 3, я хочу присоединиться к нему только на WorkItemScheduleId 95. Только первая строка!
Я попробовал этот SQL заявление, но у меня возникли проблемы:
SELECT
W.WorkItemId
,MIN(WS.WorkItemScheduleId) test
,W.WorkItemName
,WS.[PhaseName]
,WS.[StartDate]
,WS.[EndDate]
,WS.[ActualStartDate]
,WS.[ActualEndDate]
FROM
WorkItem W
INNER JOIN
WorkItem_Schedule WS ON W.WorkItemId = WS.WorkItemId
WHERE
WS.ActualEndDate IS NULL
GROUP BY
W.WorkItemId;
Я получаю сообщение об ошибке
Колонка «WorkItem.WorkItemName» недопустим в списке выбора, поскольку он не содержится либо в агрегатной функции, либо в предложении GROUP BY.
Я Google эту ошибку и обнаружил, что мне нужно добавить другие столбцы в списке выбора в группе по, так что я попробовал этот SQL, но вернуть все графики и не отчетливое WorkItemID:
SELECT
W.WorkItemId
,MIN(WS.WorkItemScheduleId) test
,W.WorkItemName
,WS.[PhaseName]
,WS.[StartDate]
,WS.[EndDate]
,WS.[ActualStartDate]
,WS.[ActualEndDate]
FROM
WorkItem W
INNER JOIN
WorkItem_Schedule WS ON W.WorkItemId = WS.WorkItemId
WHERE
WS.ActualEndDate IS NULL
GROUP BY
W.WorkItemId, WS.PhaseName, WS.StartDate, WS.EndDate, WS.ActualStartDate, WS.ActualEndDate;
Пожалуйста, помогите! Заранее спасибо!
W.WorkItemId: W.WorkItemName по умолчанию считается 1: N, поэтому, если вы группируете по id, у вас может быть несколько имен для него. Что-то вроде min (W.WorkItemName) должно решить проблему, я полагаю. –
Посмотрите на тег [tag: great-n-per-group] – Andomar
Какова логика присоединения к строке 95? Все строки имеют ActualEndDate NULL. Сначала вступил ряд, упорядоченный по какой? –