SubQuery permite colocar informações a mais em alguns pontos como SELECT, FROM ou WHERE
Exemplo da Rotina:
SELECT [CAMPOS], [SUBQUERY] FROM [TABELA] JOIN [SUBQUERY] WHERE [FILTROS] AND / OR [SUBQUERY]
Exemplo 1- Fazendo uma SubQuery nos campos – trazendo o total dos produtos:
SELECT
BM_GRUPO,
BM_DESC,
(
SELECT
COUNT(B1_COD)
FROM
SB1010 SB1
WHERE
B1_FILIAL = ' '
AND B1_GRUPO = SBM.BM_GRUPO
AND SB1.D_E_L_E_T_ = ' '
) AS TOT_PROD
FROM
SBM010 SBM
WHERE
BM_FILIAL = ' '
AND SBM.D_E_L_E_T_ = ' '
Exemplo 2- Fazendo uma SubQuery no WHERE – trazendo grupos com mais de 100 produtos:
SELECT
BM_GRUPO,
BM_DESC
FROM
SBM010 SBM
WHERE
BM_FILIAL = ' '
AND SBM.D_E_L_E_T_ = ' '
AND (
SELECT
COUNT(B1_COD)
FROM
SB1010 SB1
WHERE
B1_FILIAL = ' '
AND B1_GRUPO = SBM.BM_GRUPO
AND SB1.D_E_L_E_T_ = ' '
) > 100
Exemplo 3- Fazendo uma SubQuery no FROM – Fazendo Join com produtos bloqueados:
SELECT
BM_GRUPO,
BM_DESC,
COUNT(B1_COD) AS BLOQUEADOS
FROM
SBM010 SBM
INNER JOIN (
SELECT
B1_COD, B1_GRUPO
FROM
SB1010 SB1
WHERE
B1_FILIAL = ' '
AND B1_MSBLQL = '1'
AND SB1.D_E_L_E_T_ = ' '
) AS TAB_TEMP ON (
TAB_TEMP.B1_GRUPO = SBM.BM_GRUPO
)
WHERE
BM_FILIAL = ' '
AND SBM.D_E_L_E_T_ = ' '
GROUP BY
BM_GRUPO,
BM_DESC
Observações:
– Caso tenha dúvidas ou problemas com os exemplos, entre em contato;
– Se tiver sugestões de rotinas, pode entrar em contato;