Подзапрос вернул более одного значения - ошибка SQL - PullRequest
0 голосов
/ 08 июля 2019

У меня есть 3 таблицы: DISPO, ARTICLE & GCLIGNARTDIM

DISPO & ARTICLE linked by : DISPO.GQ_ARTICLE = ARTICLE.GA_ARTICLE 
ARTICLE & GCLIGNARTDIM linked by : ARTICLE.GA_CODEARTICLE = GCLIGNARTDIM.GL_CODEARTICLE 

Я хочу отобразить запас каждой статьи из DISPO и Продажи этой продукции из GCLIGNARTDIM.Поэтому я использую подзапрос [Продажи], чтобы принести продажи за предыдущие 6 месяцев.

SELECT GA_CODEARTICLE AS 'CODE ARTICLE',
    CC2.CC_LIBELLE,
    SUM(CASE WHEN (GQ_DEPOT='001') THEN (GQ_PHYSIQUE) else 0 END) AS 'STOCK DEPOT',
    SUM(CASE WHEN (GQ_DEPOT='002') THEN (GQ_PHYSIQUE) else 0 END) AS 'STOCK STORE',

    [SALES] = 
    (SELECT
    SUM(GL_QTEFACT)AS 'QTE VENDUS'

    FROM GCLIGNEARTDIM 

    LEFT OUTER JOIN PARPIECE GPP1 ON GL_NATUREPIECEG=GPP1.GPP_NATUREPIECEG AND GPP1.GPP_MASQUERNATURE<>'X' 
    LEFT OUTER JOIN CHOIXCOD CC2 ON GL_FAMILLENIV1=CC2.CC_CODE AND CC2.CC_TYPE='FN1'

    WHERE

    DATEADD(M, 6, GP_DATEPIECE) > getdate()
    AND CC2.CC_LIBELLE <> 'MARKETING'  AND GA_CODEARTICLE NOT LIKE 'T%' AND CC2.CC_LIBELLE <> 'ATELIER DE BEAUTé'

    GROUP BY GL_CODEARTICLE

    )

    FROM DISPO

    LEFT JOIN ARTICLE B ON GA_ARTICLE=GQ_ARTICLE 
    LEFT OUTER JOIN DEPOTS GDE1 ON GQ_DEPOT=GDE1.GDE_DEPOT
    LEFT OUTER JOIN CHOIXCOD CC2 ON GA_FAMILLENIV1=CC2.CC_CODE AND CC2.CC_TYPE='FN1'
    LEFT OUTER JOIN CHOIXCOD CC4 ON GA_FAMILLENIV2=CC4.CC_CODE AND CC4.CC_TYPE='FN2'

    WHERE (
    (GQ_DEPOT IN ('001','002') AND CC2.CC_LIBELLE is not null and CC2.CC_LIBELLE <> 'MARKETING'  AND GA_CODEARTICLE NOT LIKE 'T%' AND CC2.CC_LIBELLE <> 'ATELIER DE BEAUTé'
    ))
    GROUP BY GA_CODEARTICLE,GA_CODEBARRE, CC2.CC_LIBELLE,CC4.CC_LIBELLE

    ORDER BY [CODE ARTICLE]

Я получаю сообщение об ошибке:

Подзапрос возвратил более 1 значения.Это недопустимо, если подзапрос следует =,! =, <, <=,>,> = Или когда подзапрос используется в качестве выражения.

1 Ответ

0 голосов
/ 08 июля 2019

Это может помочь понять проблему

   USE AdventureWorks2012
GO
-- This sub query will run as expected.
SELECT p.BusinessEntityID
      ,p.PhoneNumber 
      ,(SELECT Name FROM [Person].[PhoneNumberType] WHERE  PhoneNumberTypeID = p.PhoneNumberTypeID ) as  [Type] 
      -- This Sub Query returns one result against a row.
FROM  [Person].[PersonPhone] p
GO
-- This sub query will throw exception.
SELECT p.BusinessEntityID
      ,p.PhoneNumber 
      ,(SELECT Name FROM [Person].[PhoneNumberType] WHERE  PhoneNumberTypeID = p.PhoneNumberTypeID OR PhoneNumberTypeID = 1) as  [Type]
      -- This Sub Query returns more than one result against a row.
FROM  [Person].[PersonPhone] p
--Msg 512, Level 16, State 1, Line 9
--Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...