- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Select em tabela temporaria.
×
Linguagem de Programação ADVPL
Perguntas Select em tabela temporaria.
- nagasako
- Autor do Tópico
- Desconectado
- Membro Iniciado
Menos
Mais
- Postagens: 11
- Obrigados Recebidos: 0
11 anos 6 meses atrás #14196
por nagasako
Select em tabela temporaria. foi criado por nagasako
PEssoal tenho o codigo abaixo, onde o resultado teoricamente fica em cQuery2(temporário), é possível fazer um select em cQuery2 para 'juntar' os dados de cquery2 com os dados de outra tabela, exemplo SC4010?
cQuery2 := " SELECT D2_FILIAL,SUBSTRING(B1_COD,1,9) COD,SUM(D2_QUANT*ZA_VOLUME) AS [VOLUMEREAL],SUM(D2_TOTAL) AS [TOTALREAL], (SUM(D2_TOTAL)/SUM(D2_QUANT*ZA_VOLUME)) AS [PRUNITREAL], "
cQuery2 += " SUM(D2_CUSTO1) AS [CPV] "
cQuery2 += " FROM SD2010 SD2, SF4010 SF4(NOLOCK),SB1010 SB1(NOLOCK), SZA010 SZA "
cQuery2 += " WHERE SD2.D2_FILIAL = SB1.B1_FILIAL "
cQuery2 += " AND SD2.D_E_L_E_T_ <> '*' "
cQuery2 += " and SB1.D_E_L_E_T_ <> '*' "
cQuery2 += " and SF4.D_E_L_E_T_ <> '*' "
cQuery2 += " and SZA.D_E_L_E_T_ <> '*' "
cQuery2 += " AND SF4.F4_FILIAL = SD2.D2_FILIAL "
cQuery2 += " AND SUBSTRING(SB1.B1_COD,1,9) *= SUBSTRING(SD2.D2_COD,1,9) "
cQuery2 += " AND SUBSTRING(D2_COD,11,12) = ZA_COD "
cQuery2 += " AND SB1.B1_LOCPAD BETWEEN '02' AND '03' "
cQuery2 += " AND D2_TES = F4_CODIGO "
If mv_par01 = 'S'
cQuery2 += " AND SF4.F4_DUPLIC = 'S' "
ElseIf mv_par01 = 'N'
cQuery2 += " AND SF4.F4_DUPLIC = 'N' "
ElseIf mv_par01 = 'A'
EndIf
If mv_par02 = 'S'
cQuery2 += " AND SF4.F4_ESTOQUE = 'S' "
ElseIf mv_par02 = 'N'
cQuery2 += " AND SF4.F4_ESTOQUE = 'N' "
ElseIf mv_par02 = 'A'
EndIf
cQuery2 += " AND D2_TIPO = 'N' "
cQuery2 += " AND D2_CLIENTE <> 'C01762' "
cQuery2 += " AND D2_CLIENTE <> 'AGRCOM' "
cQuery2 += " AND D2_FILIAL = '01' "
cQuery2 += " AND B1_COD NOT LIKE '%.' "
cQuery2 += " AND D2_EMISSAO BETWEEN '"+dtos(mv_par03)+"' "+ "AND '"+dtos(mv_par04)+"'"
cQuery2 += " GROUP BY SUBSTRING(B1_COD,1,9),D2_FILIAL "
DbUseArea(.T.,"TOPCONN",TCGenQry(,,cQuery2),"cQuery2" ,.T. , .F. )
cQuery2 := " SELECT D2_FILIAL,SUBSTRING(B1_COD,1,9) COD,SUM(D2_QUANT*ZA_VOLUME) AS [VOLUMEREAL],SUM(D2_TOTAL) AS [TOTALREAL], (SUM(D2_TOTAL)/SUM(D2_QUANT*ZA_VOLUME)) AS [PRUNITREAL], "
cQuery2 += " SUM(D2_CUSTO1) AS [CPV] "
cQuery2 += " FROM SD2010 SD2, SF4010 SF4(NOLOCK),SB1010 SB1(NOLOCK), SZA010 SZA "
cQuery2 += " WHERE SD2.D2_FILIAL = SB1.B1_FILIAL "
cQuery2 += " AND SD2.D_E_L_E_T_ <> '*' "
cQuery2 += " and SB1.D_E_L_E_T_ <> '*' "
cQuery2 += " and SF4.D_E_L_E_T_ <> '*' "
cQuery2 += " and SZA.D_E_L_E_T_ <> '*' "
cQuery2 += " AND SF4.F4_FILIAL = SD2.D2_FILIAL "
cQuery2 += " AND SUBSTRING(SB1.B1_COD,1,9) *= SUBSTRING(SD2.D2_COD,1,9) "
cQuery2 += " AND SUBSTRING(D2_COD,11,12) = ZA_COD "
cQuery2 += " AND SB1.B1_LOCPAD BETWEEN '02' AND '03' "
cQuery2 += " AND D2_TES = F4_CODIGO "
If mv_par01 = 'S'
cQuery2 += " AND SF4.F4_DUPLIC = 'S' "
ElseIf mv_par01 = 'N'
cQuery2 += " AND SF4.F4_DUPLIC = 'N' "
ElseIf mv_par01 = 'A'
EndIf
If mv_par02 = 'S'
cQuery2 += " AND SF4.F4_ESTOQUE = 'S' "
ElseIf mv_par02 = 'N'
cQuery2 += " AND SF4.F4_ESTOQUE = 'N' "
ElseIf mv_par02 = 'A'
EndIf
cQuery2 += " AND D2_TIPO = 'N' "
cQuery2 += " AND D2_CLIENTE <> 'C01762' "
cQuery2 += " AND D2_CLIENTE <> 'AGRCOM' "
cQuery2 += " AND D2_FILIAL = '01' "
cQuery2 += " AND B1_COD NOT LIKE '%.' "
cQuery2 += " AND D2_EMISSAO BETWEEN '"+dtos(mv_par03)+"' "+ "AND '"+dtos(mv_par04)+"'"
cQuery2 += " GROUP BY SUBSTRING(B1_COD,1,9),D2_FILIAL "
DbUseArea(.T.,"TOPCONN",TCGenQry(,,cQuery2),"cQuery2" ,.T. , .F. )
Por favor Acessar ou Registrar para participar da conversa.
- kanaamlrr
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 1576
- Obrigados Recebidos: 4
11 anos 6 meses atrás #14200
por kanaamlrr
Respondido por kanaamlrr no tópico Select em tabela temporaria.
Não, pois quando você realiza esse procedimento, ele cria um arquivo de trabalho temporário e não uma tabela temporária no banco.
A forma correta seria realizar o join antes de executar a query
A forma correta seria realizar o join antes de executar a query
Por favor Acessar ou Registrar para participar da conversa.
- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Select em tabela temporaria.
Tempo para a criação da página:0.095 segundos