Usuário com melhor resposta
query

Pergunta
-
Pessoal
Fiz essa query no sql 2012
SELECT
B2_FILIAL [FILIAL]
,B2_COD [CODIGO]
,B1_DESC [DESCRIÇÃO]
,B1_UM [UNIDADE]
,B2_QATU [QTDE]
,[FALTA INSPEÇÃO]=(SELECT ISNULL(SB2010.B2_QATU,'0') FROM SB2010 WHERE B2_FILIAL='0102'
AND B2_LOCAL='98'AND B2_COD=B1_COD )
,[BLOQUEADO]=(SELECT ISNULL(SB2010.B2_QATU,'0') FROM SB2010 WHERE B2_FILIAL='0102'
AND B2_LOCAL='99'AND B2_COD=B1_COD )
,[TOTAL] = (SELECT SUM (SB2010.B2_QATU) FROM SB2010 WHERE B2_FILIAL='0102'
AND B2_LOCAL IN('02','98','99')AND B2_COD=B1_COD )
,[QTDE P / PALLET] =
CASE
WHEN SB1010.B1_COD='W10488059' THEN '120'
WHEN SB1010.B1_COD='W10488060' THEN '120'
END
FROM SB2010 , SB1010
WHERE B2_FILIAL='0102'
AND B1_FILIAL='0102'
AND B1_COD= B2_COD
AND SB2010.D_E_L_E_T_<>'*'
AND SB1010.D_E_L_E_T_<>'*'
AND B2_LOCAL IN('02')
--AND SB2010.B2_QATU>'0.00'
ORDER BY
B2_LOCAL,B2_CODmais quando vou rodar apresenta esse mensagem
SQL Server Database Error: Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
sexta-feira, 3 de outubro de 2014 19:49
Respostas
-
Marco,
Como nossos amigos indicaram, seu problema está relacionado nas subqueries:
[FALTA INSPEÇÃO]=(SELECT ISNULL(SB2010.B2_QATU,'0') FROM SB2010 WHERE B2_FILIAL='0102' AND B2_LOCAL='98'AND B2_COD=B1_COD ) ,[BLOQUEADO]=(SELECT ISNULL(SB2010.B2_QATU,'0') FROM SB2010 WHERE B2_FILIAL='0102' AND B2_LOCAL='99'AND B2_COD=B1_COD )
Sugiro que você revise os critérios da cláusula WHERE nestas subqueries e se o resultado for repetitivo adicione as condições TOP 1 e DISTINCT para evitar erros.
Segue um exemplo abaixo para você adaptar às suas duas subqueries:
[FALTA INSPEÇÃO]=(SELECT DISTINCT TOP 1 ISNULL(SB2010.B2_QATU,'0') FROM ...
Se ajudou na sua solução, não esqueça de marcar como resposta !
Abraços,
Durval RamosMicrosoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform---------------------------------- Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Sugerido como Resposta Ricardo Barbosa Cortes segunda-feira, 6 de outubro de 2014 18:07
- Marcado como Resposta Ricardo Barbosa Cortes segunda-feira, 6 de outubro de 2014 18:23
segunda-feira, 6 de outubro de 2014 17:39Moderador
Todas as Respostas
-
Bom dia Marco,
Você tem três subconsultas no seu SELECT, uma é no campo [FALTA INSPEÇÃO], outra no campo [BLOQUEADO] e outra no campo [TOTAL].
A última subconsulta ([TOTAL]) não tem problema, porque está utilizando a função SUM.
O erro está sendo gerado em uma das duas primeiras, onde está retornando mais de um valor para apenas um campo (por exemplo, está retornando os valores "123" e "456" para apenas um campo).
Uma dica para resolver esse problema é utilizar a sintaxe SELECT TOP 1, que retornará apenas o primeiro registro encontrado dentro da ordenação da sua consulta.
Abs.
segunda-feira, 6 de outubro de 2014 12:31 -
Marco,
Como nossos amigos indicaram, seu problema está relacionado nas subqueries:
[FALTA INSPEÇÃO]=(SELECT ISNULL(SB2010.B2_QATU,'0') FROM SB2010 WHERE B2_FILIAL='0102' AND B2_LOCAL='98'AND B2_COD=B1_COD ) ,[BLOQUEADO]=(SELECT ISNULL(SB2010.B2_QATU,'0') FROM SB2010 WHERE B2_FILIAL='0102' AND B2_LOCAL='99'AND B2_COD=B1_COD )
Sugiro que você revise os critérios da cláusula WHERE nestas subqueries e se o resultado for repetitivo adicione as condições TOP 1 e DISTINCT para evitar erros.
Segue um exemplo abaixo para você adaptar às suas duas subqueries:
[FALTA INSPEÇÃO]=(SELECT DISTINCT TOP 1 ISNULL(SB2010.B2_QATU,'0') FROM ...
Se ajudou na sua solução, não esqueça de marcar como resposta !
Abraços,
Durval RamosMicrosoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform---------------------------------- Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Sugerido como Resposta Ricardo Barbosa Cortes segunda-feira, 6 de outubro de 2014 18:07
- Marcado como Resposta Ricardo Barbosa Cortes segunda-feira, 6 de outubro de 2014 18:23
segunda-feira, 6 de outubro de 2014 17:39Moderador