SQL Server: GROUP BY с одним столбцом - PullRequest
0 голосов
/ 12 июня 2018

Я попытался установить левое соединение, но когда я сделал group by с одним столбцом и выбрал несколько столбцов, я получил ошибку SQL.

Это мой запрос:

SELECT
    b.ClientCode,
    b.LastName, b.FirstName,
    b."Id" AS IdClient,
    c.CaseDate,
    b.Gender,
    b.BirthDate
FROM
    dbo.Clients b
LEFT JOIN
    dbo.ClientCases c ON c.ClientCode = b.ClientCode
WHERE
    b.ClientCode LIKE '%1%'
    AND DATEDIFF(DAY, '01/06/2017', c.CaseDate) >= 0
    AND DATEDIFF(DAY, '05/06/2017', c.CaseDate) <= 0
GROUP BY
    b.ClientCode
ORDER BY
    b.ClientCode

Когда я пишу запрос так:

SELECT
    b.ClientCode,
    b.LastName, b.FirstName,
    b."Id" AS IdClient,
    c.CaseDate,
    b.Gender,
    b.BirthDate
FROM
    dbo.Clients b
LEFT JOIN
    dbo.ClientCases c ON c.ClientCode = b.ClientCode
WHERE
    b.ClientCode LIKE '%1%'
    AND DATEDIFF(DAY, '01/06/2017', c.CaseDate) >= 0
    AND DATEDIFF(DAY, '05/06/2017', c.CaseDate) <= 0
GROUP BY
    b.ClientCode, b.LastName, b.FirstName, b."Id",
    b.Gender, b.BirthDate, c.CaseDate
ORDER BY
    b.ClientCode

Он работает - но возвращает дубликат ClientCode ...

Что я могу сделать?

1 Ответ

0 голосов
/ 12 июня 2018

Вам нужно поставить MAX (или MIN, или другую статистическую функцию) для других ваших столбцов из-за GROUP BY.В противном случае он не знает нужного значения.

SELECT b.ClientCode
    ,MAX(b.LastName)
    ,MAX(b.FirstName)
    ,MAX(b."Id") AS IdClient
    ,MAX(c.CaseDate)
    ,MAX(b.Gender)
    ,MAX(b.BirthDate)
FROM dbo.Clients b
LEFT JOIN dbo.ClientCases c ON c.ClientCode = b.ClientCode
WHERE b.ClientCode LIKE '%1%'
    AND DATEDIFF(day, '01/06/2017', c.CaseDate) >= 0
    AND DATEDIFF(day, '05/06/2017', c.CaseDate) <= 0
GROUP BY b.ClientCode
ORDER BY b.ClientCode

Я подозреваю, что вы получаете ошибку:

Msg 8120, Level 16, State 1, Line 1
Column 'blah blah' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
...