× Linguagem de Programação ADVPL

Perguntas Ajuda SQL

Mais
11 anos 4 dias atrás #18767 por jcesar1299
Ajuda SQL foi criado por jcesar1299
Pessoal boa tarde,

Preciso de uma ajuda na query abaixo.
Como eu posso fazer para que o campo SD2.D2_TOTAL só traga o resultado quando o campo SD2.D2_TES for igual as TES que eu determinar, preciso fazer um where só para as TES que geram faturamento.
Tentei fazer uma subquery mais não consegui.
Alguém poderia me ajudar.

Obrigado a todos!!!

SELECT
CASE SF2.F2_TPFRETE
WHEN 'C' THEN 'CIF'
WHEN 'F' THEN 'FOB'
ELSE 'VAZIO'
END AS 'DESC.FRETE',

SD1.D1_COD AS 'CODIGO PROD.SD1',
SD1.D1_TOTAL AS 'VLR TOTAL CTR' ,
SD1.D1_TES AS 'TES SD1',
SD1.D1_FORNECE AS 'FORNECEDOR SD1',
SD1.D1_DOC AS 'NUM.DOC SD1',
CONVERT(DATE, SD1.D1_EMISSAO,103) AS 'EMISSAO',
CONVERT(DATE, SD1.D1_DTDIGIT,103) AS 'DT DIGITACAO',
SD1.D1_NFORI AS 'NF ORIG. SD1',
SD1.D1_SERIORI AS 'SERIE',

SA2.A2_NOME AS 'NOME',

SF2.F2_EST AS 'UF CLIENTE',
SF2.F2_DOC AS 'NF SF2',
CONVERT(DATE,SF2.F2_EMISSAO,103) AS 'DT EMISSAO',
SF2.F2_TPFRETE AS 'TP FRETE',
SF2.F2_CLIENTE AS 'CLIENTE',
SF2.F2_VOLUME1 AS 'VOLUME',
SF2.F2_PLIQUI AS 'PESO LIQ.',
SF2.F2_TRANSP AS 'TRANSP',

SF2.F2_VALBRUT AS 'VALOR NF SF2', <<<<<<<<<<<<<<<<<<
--SD2.D2_TOTAL AS 'TOTAL NF SD2', <<<<<<<<<<<<<<<<<<


SA1.A1_NOME AS 'NOME CLIENTE',
SA1.A1_MUN AS 'MUNICIPIO',
SA4.A4_NOME AS 'NOME TRANSP.'



FROM SD1010 AS SD1

INNER JOIN SF2010 AS SF2 ON SD1.D1_NFORI+SD1.D1_SERIORI = SF2.F2_DOC+SF2.F2_SERIE
INNER JOIN SA2010 AS SA2 ON SD1.D1_FORNECE+SD1.D1_FILIAL = SA2.A2_COD+SA2.A2_LOJA
INNER JOIN SA1010 AS SA1 ON SF2.F2_CLIENTE+SF2.F2_LOJA = SA1.A1_COD+SA1.A1_LOJA
INNER JOIN SA4010 AS SA4 ON SF2.F2_TRANSP = SA4.A4_COD


WHERE
(SD1.D1_COD = 'SEV00001') AND
(SD1.D1_DTDIGIT >= '20130101' AND SD1.D1_DTDIGIT <= '20130131') AND
SD1.D_E_L_E_T_ <> '*' AND
SF2.D_E_L_E_T_ <> '*' AND
SA2.D_E_L_E_T_ <> '*' AND
SA4.D_E_L_E_T_ <> '*'


ORDER BY SF2.F2_DOC

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 3 dias atrás #18770 por lalberto
Respondido por lalberto no tópico Ajuda SQL
Ve ai não testei.

SELECT
CASE SF2.F2_TPFRETE
WHEN 'C' THEN 'CIF'
WHEN 'F' THEN 'FOB'
ELSE 'VAZIO'
END AS 'DESC.FRETE',

SD1.D1_COD AS 'CODIGO PROD.SD1',
SD1.D1_TOTAL AS 'VLR TOTAL CTR' ,
SD1.D1_TES AS 'TES SD1',
SD1.D1_FORNECE AS 'FORNECEDOR SD1',
SD1.D1_DOC AS 'NUM.DOC SD1',
CONVERT(DATE, SD1.D1_EMISSAO,103) AS 'EMISSAO',
CONVERT(DATE, SD1.D1_DTDIGIT,103) AS 'DT DIGITACAO',
SD1.D1_NFORI AS 'NF ORIG. SD1',
SD1.D1_SERIORI AS 'SERIE',

SA2.A2_NOME AS 'NOME',

SF2.F2_EST AS 'UF CLIENTE',
SF2.F2_DOC AS 'NF SF2',
CONVERT(DATE,SF2.F2_EMISSAO,103) AS 'DT EMISSAO',
SF2.F2_TPFRETE AS 'TP FRETE',
SF2.F2_CLIENTE AS 'CLIENTE',
SF2.F2_VOLUME1 AS 'VOLUME',
SF2.F2_PLIQUI AS 'PESO LIQ.',
SF2.F2_TRANSP AS 'TRANSP',

SF2.F2_VALBRUT AS 'VALOR NF SF2',
SD2.D2_TOTAL AS 'TOTAL NF SD2',


SA1.A1_NOME AS 'NOME CLIENTE',
SA1.A1_MUN AS 'MUNICIPIO',
SA4.A4_NOME AS 'NOME TRANSP.'



FROM SD1010 AS SD1

INNER JOIN SF2010 AS SF2 ON SD1.D1_NFORI+SD1.D1_SERIORI = SF2.F2_DOC+SF2.F2_SERIE
INNER JOIN SD2010 AS SD2 ON SF2.F2_DOC+SF2.F2_SERIE+SF2.F2_CLIENTE+SF2.F2_LOJA = SD2.D2_DOC+SD2.D2_SERIE+SD2.D2_CLIENTE+SD2.D2_LOJA
INNER JOIN SA2010 AS SA2 ON SD1.D1_FORNECE+SD1.D1_FILIAL = SA2.A2_COD+SA2.A2_LOJA
INNER JOIN SA1010 AS SA1 ON SF2.F2_CLIENTE+SF2.F2_LOJA = SA1.A1_COD+SA1.A1_LOJA
INNER JOIN SA4010 AS SA4 ON SF2.F2_TRANSP = SA4.A4_COD
INNER JOIN SF4010 AS SF4 ON SD2.D2_TES = SF4.F4_CODIGO AND SF4.F4_DUPLIC = 'S'


WHERE
(SD1.D1_COD = 'SEV00001') AND
(SD1.D1_DTDIGIT >= '20130101' AND SD1.D1_DTDIGIT <= '20130131') AND
SD1.D_E_L_E_T_ <> '*' AND
SF2.D_E_L_E_T_ <> '*' AND
SD2.D_E_L_E_T_ <> '*' AND
SA2.D_E_L_E_T_ <> '*' AND
SF4.D_E_L_E_T_ <> '*' AND
SA4.D_E_L_E_T_ <> '*'


ORDER BY SF2.F2_DOC

Luiz Alberto Vieira Alves
Proprietário
55 (12) 9 8256-5905 (Vivo)
www.3lsystems.com.br
www.masteradvpl.com.br

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 3 dias atrás - 11 anos 3 dias atrás #18775 por jcesar1299
Respondido por jcesar1299 no tópico Ajuda SQL
Luiz boa tarde!

Do jeito que você fez ela traz o resultado por item e eu preciso que o campo D2_TOTAL traga o resultado total e não por item.


O resultado esta assim:
SD1---- SF2---- V.SF2---- V.SD2
177---- 177---- 1174,75----170,8
177---- 177---- 1174,75----271,8
177---- 177---- 1174,75----117,2
177---- 177---- 1174,75----145,15
177---- 177---- 1174,75----271,8
177---- 177---- 1174,75----180
718---- 718---- 1107,10----960
718---- 718---- 1107,10----32,47
718---- 718---- 1107,10----114,63


Eu preciso que a query me retorne assim:

SD1----SF2----V.SF2---- V.SD2
177----177----1174,75----1156,75
718----718----1107,10----1107,1

Obrigado pela ajuda!!!!
Ultima edição: 11 anos 3 dias atrás por jcesar1299. Razão: Visualização ruim

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 3 dias atrás #18780 por kanaamlrr
Respondido por kanaamlrr no tópico Ajuda SQL
Julio,
Adicione um Group By na sua query e um SUM() na SD2
ficaria mais ou menos assim:

SELECT
CASE SF2.F2_TPFRETE
WHEN 'C' THEN 'CIF'
WHEN 'F' THEN 'FOB'
ELSE 'VAZIO'
END AS 'DESC.FRETE',

SD1.D1_COD AS 'CODIGO PROD.SD1',
SUM(SD1.D1_TOTAL) AS 'VLR TOTAL CTR' ,
SD1.D1_TES AS 'TES SD1',
SD1.D1_FORNECE AS 'FORNECEDOR SD1',
SD1.D1_DOC AS 'NUM.DOC SD1',
CONVERT(DATE, SD1.D1_EMISSAO,103) AS 'EMISSAO',
CONVERT(DATE, SD1.D1_DTDIGIT,103) AS 'DT DIGITACAO',
SD1.D1_NFORI AS 'NF ORIG. SD1',
SD1.D1_SERIORI AS 'SERIE',

SA2.A2_NOME AS 'NOME',

SF2.F2_EST AS 'UF CLIENTE',
SF2.F2_DOC AS 'NF SF2',
CONVERT(DATE,SF2.F2_EMISSAO,103) AS 'DT EMISSAO',
SF2.F2_TPFRETE AS 'TP FRETE',
SF2.F2_CLIENTE AS 'CLIENTE',
SF2.F2_VOLUME1 AS 'VOLUME',
SF2.F2_PLIQUI AS 'PESO LIQ.',
SF2.F2_TRANSP AS 'TRANSP',

SF2.F2_VALBRUT AS 'VALOR NF SF2',
SUM(SD2.D2_TOTAL) AS 'TOTAL NF SD2',


SA1.A1_NOME AS 'NOME CLIENTE',
SA1.A1_MUN AS 'MUNICIPIO',
SA4.A4_NOME AS 'NOME TRANSP.'



FROM SD1010 AS SD1

INNER JOIN SF2010 AS SF2 ON SD1.D1_NFORI+SD1.D1_SERIORI = SF2.F2_DOC+SF2.F2_SERIE
INNER JOIN SD2010 AS SD2 ON SF2.F2_DOC+SF2.F2_SERIE+SF2.F2_CLIENTE+SF2.F2_LOJA = SD2.D2_DOC+SD2.D2_SERIE+SD2.D2_CLIENTE+SD2.D2_LOJA
INNER JOIN SA2010 AS SA2 ON SD1.D1_FORNECE+SD1.D1_FILIAL = SA2.A2_COD+SA2.A2_LOJA
INNER JOIN SA1010 AS SA1 ON SF2.F2_CLIENTE+SF2.F2_LOJA = SA1.A1_COD+SA1.A1_LOJA
INNER JOIN SA4010 AS SA4 ON SF2.F2_TRANSP = SA4.A4_COD
INNER JOIN SF4010 AS SF4 ON SD2.D2_TES = SF4.F4_CODIGO AND SF4.F4_DUPLIC = 'S'


WHERE
(SD1.D1_COD = 'SEV00001') AND
(SD1.D1_DTDIGIT >= '20130101' AND SD1.D1_DTDIGIT <= '20130131') AND
SD1.D_E_L_E_T_ <> '*' AND
SF2.D_E_L_E_T_ <> '*' AND
SD2.D_E_L_E_T_ <> '*' AND
SA2.D_E_L_E_T_ <> '*' AND
SF4.D_E_L_E_T_ <> '*' AND
SA4.D_E_L_E_T_ <> '*'

GROUP BY F2_TPFRETE, D1_COD, D1_TES, D1_FORNECE, D1_DOC, D1_EMISSAO, D1_DTDIGIT, D1_NFORI, D1_SERIEORI, A1_NOME, F2_EST, F2_DOC, F2_EMISSAO, F2_TPFRETE, F2_CLIENTE, F2_VOLUME1, F2_PLIQUI, F2_TRANSP, F2_VALBRUT, A1_NOME, A1_MUN, A4_NOME
ORDER BY SF2.F2_DOC

Assim deve funcionar.

Por favor Acessar ou Registrar para participar da conversa.

Tempo para a criação da página:0.091 segundos
Joomla templates by a4joomla