Попытка подзапроса в первый раз и не знаю, как в агрегированном выражении - PullRequest
0 голосов
/ 06 марта 2020

Я пытаюсь выполнить приведенный ниже скрипт, но не знаю, как объединить агрегатный оператор выбора.

Я пытаюсь добавить подзапрос для суммирования количества частей в fsl. Я получаю следующие ошибки:

Сообщение 8120, уровень 16, состояние 1, строка 17 Столбец «Customer.CustInvId» недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложение GROUP BY.

Сообщение 8120, уровень 16, состояние 1, строка 16 Столбец 'dbo.FSLMaster.FSLId' недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY.

Может ли кто-нибудь помочь мне выполнить это? Спасибо огромное!

PS Не стесняйтесь говорить мне, что я ужасно объясняю, и я сделаю все возможное, чтобы рассказать больше о том, что я делаю

SELECT c.CustCode
    , na.NatName
    , c.[Name]
    , fm.Code
    , fm.FSLName
    , cfs.SquareFeet AS 'SQFT'
    , CONCAT(a.AddrLine1,',', a.City,',', a.StateAbbr,',', a.ZipCode,',', a.CountryId) AS 'Full Adrress'
    , a.AddrLine1
    , a.City
    , a.StateAbbr
    , a.ZipCode
    , a.CountryId
    , a.Longitude
    , a.Latitude
    ,
    (         
  SELECT ISNULL(SUM(ISNULL(OnHandQty,0) - (ISNULL(ReservedQty,0) )),0) FROM dbo.FSLStock WITH (NOLOCK) WHERE FSLStock.FSLId = FM.FSLId         
  AND PartMasterId IN  ( SELECT PartMasterId FROM dbo.PartMaster P  WITH (NOLOCK) WHERE P.CustInvId=C.CustInvId)) AS IOH 
FROM Customer C WITH(NOLOCK)        
INNER JOIN dbo.CustInvProfile CP WITH(NOLOCK) ON C.CustCode = CP.CustCode AND C.ValidTo IS NULL        
INNER JOIN dbo.CustFSLAssociation CF WITH(NOLOCK) ON CF.CustInvId = CP.CustInvId AND CF.ValidTo IS NULL        
INNER JOIN dbo.FSLMaster FM WITH(NOLOCK) ON FM.FSLId = CF.FSLId AND (COALESCE(FM.ValidTo,getutcdate()) >= getutcdate())       
LEFT JOIN CustFSLStrgDtl CFS WITH(NOLOCK) ON cfs.CustInvId = CF.CustInvId and cfs.FSLId = CF.FSLId
LEFT JOIN [Address] a ON fm.AddrId = a.AddrId
LEFT JOIN NationalAccount na ON c.NatAccountId = na.NatAccountId
LEFT JOIN FSLStock fs ON fm.FSLId = fs.FSLId
GROUP BY c.CustCode, na.NatName, c.[Name], fm.Code, fm.FSLName, cfs.SquareFeet, a.AddrLine1, a.City, a.StateAbbr, a.ZipCode, a.CountryId, a.Longitude, a.Latitude

Ответы [ 2 ]

0 голосов
/ 06 марта 2020

Вы можете использовать distinct вместо удаления дубликатов:

select distinct c.CustCode, na.NatName, c.[Name], fm.Code, fm.FSLName,
       . . . 
from Customer C inner join 
     dbo.CustInvProfile CP
     on . . . 

Примечание: NOLOCK считывает грязные данные (незафиксированные). Пожалуйста, будьте осторожны.

0 голосов
/ 06 марта 2020

Вы должны использовать Группу только тогда, когда вам нужно выполнить какое-то агрегирование на сгруппированных уровнях. На самом деле подзапрос вам не нужен, вы можете преобразовать его в объединение:

SELECT c.CustCode
, na.NatName
, c.[Name]
, fm.Code
, fm.FSLName
, cfs.SquareFeet AS 'SQFT'
, CONCAT(a.AddrLine1,',', a.City,',', a.StateAbbr,',', a.ZipCode,',', a.CountryId) AS 'Full Adrress'
, a.AddrLine1
, a.City
, a.StateAbbr
, a.ZipCode
, a.CountryId
, a.Longitude
, a.Latitude
, SUM(CASE WHEN P.Partmasterid is not null then ISNULL(SUM(ISNULL(OnHandQty,0) - (ISNULL(ReservedQty,0) )),0) else 0 end) as IOH
FROM Customer C WITH(NOLOCK)        
INNER JOIN dbo.CustInvProfile CP WITH(NOLOCK) ON C.CustCode = CP.CustCode AND C.ValidTo IS NULL        
INNER JOIN dbo.CustFSLAssociation CF WITH(NOLOCK) ON CF.CustInvId = CP.CustInvId AND CF.ValidTo IS NULL        
INNER JOIN dbo.FSLMaster FM WITH(NOLOCK) ON FM.FSLId = CF.FSLId AND (COALESCE(FM.ValidTo,getutcdate()) >= getutcdate())       
LEFT JOIN CustFSLStrgDtl CFS WITH(NOLOCK) ON cfs.CustInvId = CF.CustInvId and cfs.FSLId = CF.FSLId
LEFT JOIN [Address] a ON fm.AddrId = a.AddrId
LEFT JOIN NationalAccount na ON c.NatAccountId = na.NatAccountId
LEFT JOIN FSLStock fs ON fm.FSLId = fs.FSLId
LEFT JOIN PartMaster P ON P.CustInvId=C.CustInvId
GROUP BY c.CustCode, na.NatName, c.[Name], fm.Code, fm.FSLName, cfs.SquareFeet, a.AddrLine1, a.City, 
     a.StateAbbr, a.ZipCode, a.CountryId, a.Longitude, a.Latitude

Если вы считаете, что агрегирование не требуется, вы можете просто удалить оператор group by. Надеюсь, это поможет.

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