Добавление статистического столбца, вызывающего ошибку GROUP BY - PullRequest
0 голосов
/ 19 сентября 2018

Я добавляю статистический столбец min(finumber) в свой запрос.Как только я добавлю этот номер, я хочу иметь возможность использовать его в ORDER BY.Когда я удаляю min(finumber), запрос работает нормально.Когда я добавляю min(finumber), это выдает мне ошибку:

Столбец 'soitem.fsono' недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY.

Мой вопрос: как я могу добавить min(finumber) и использовать его для ORDER BY моих данных?

SELECT A.fsono,
       MAX(A.Attention) AS Attention,
       MAX(A.Address1) AS Address1,
       MAX(A.Address2) AS Address2,
       A.fcustno,
       A.fcontact,
       A.min_fin

FROM (SELECT soitem.fsono,
             somast.fcustno,
             somast.fcontact,
               min(finumber)as min_fin, 
             CASE
                  WHEN (CONVERT(varchar(MAX), soship.fmstreet)) LIKE 'ATTN%' THEN LEFT(CONVERT(varchar(MAX), soship.fmstreet), CHARINDEX(CHAR(10), CONVERT(varchar(MAX), soship.fmstreet)))
                  ELSE NULL
             END AS Attention,
             CASE WHEN [id] = 2 THEN S.val ELSE NULL END AS Address1,
             CASE WHEN [id] = 3 THEN S.val ELSE NULL END AS Address2
      FROM soitem
           INNER JOIN somast ON soitem.fsono = somast.fsono
           LEFT OUTER JOIN soship ON somast.fsono = soship.fcsono
                                 AND soship.fcenumber = ''
           CROSS APPLY [dbo].[split3](soship.fmstreet, CHAR(13) + CHAR(10)) S
      WHERE (somast.fstatus <> 'Cancelled')
        AND (somast.fsocoord = 'IFP'
          OR somast.fsocoord = '711')
        AND somast.fsono >= '034023') A
GROUP BY A.fsono,
         A.fcustno,
         A.fcontact
 Order by A.fsono, A.min_fin
  ;

1 Ответ

0 голосов
/ 19 сентября 2018

Ошибка говорит о проблеме здесь.

min(finumber) находится в вашем подзапросе, а не в вашем основном запросе.Ваш подзапрос не имеет GROUP BY, следовательно, ошибка.Вам нужно будет использовать предложение OVER.Однако это псевдо SQL:

MIN(finumber) OVER (PARTITION BY {Partition Columns}) AS min_fin

Я бы предположил, что эти столбцы будут soitem.fsono, somast.fcustno, somast.fcontact.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...