Home All Groups Group Topic Archive Search About
Author
27 Nov 2007 8:20 PM
Paulo
Hi, can you explain me what is the "(+)" on some lines below? How can it be
converted to SQL SERVER 2000/2005? Thanks!

SELECT H.COD_UNIDADE_NEGOCIO, ST_APROVADO_SUPERVISOR,
DATA_HORAS, QDE_HORAS, DESCR_PROJETO, DESCR_ATIVIDADE,
NOME_FUNCIONARIO, N.DESCR_UNIDADE_NEGOCIO, TC.NUMERO_CAPEX,
TC.DESCR_CAPEX FROM TS_HORAS H, TS_PROJETO P ,
TS_ATIVIDADE A, TS_FUNCIONARIO F, TS_NEGOCIO N, TS_CAPEX TC
WHERE H.COD_ATIVIDADE=A.COD_ATIVIDADE AND
H.COD_UNIDADE_NEGOCIO=N.COD_UNIDADE_NEGOCIO AND
H.COD_MATRICULA=F.COD_MATRICULA AND
H.COD_PROJETO=P.COD_PROJETO AND
(DATA_HORAS >= '20030301') AND (DATA_HORAS <= '20030331')
AND H.NUMERO_CAPEX=TC.NUMERO_CAPEX (+)
AND H.ST_CAPITALIZAVEL <> 0
ORDER BY N.DESCR_UNIDADE_NEGOCIO, NOME_FUNCIONARIO, DATA_HORAS,
DESCR_PROJETO, DESCR_ATIVIDADE

Author
27 Nov 2007 9:14 PM
David Portas
Show quote
"Paulo" <prbs***@uol.com.br> wrote in message
news:%23KFC5LTMIHA.2064@TK2MSFTNGP06.phx.gbl...
> Hi, can you explain me what is the "(+)" on some lines below? How can it
> be converted to SQL SERVER 2000/2005? Thanks!
>
> SELECT H.COD_UNIDADE_NEGOCIO, ST_APROVADO_SUPERVISOR,
> DATA_HORAS, QDE_HORAS, DESCR_PROJETO, DESCR_ATIVIDADE,
> NOME_FUNCIONARIO, N.DESCR_UNIDADE_NEGOCIO, TC.NUMERO_CAPEX,
> TC.DESCR_CAPEX FROM TS_HORAS H, TS_PROJETO P ,
> TS_ATIVIDADE A, TS_FUNCIONARIO F, TS_NEGOCIO N, TS_CAPEX TC
> WHERE H.COD_ATIVIDADE=A.COD_ATIVIDADE AND
> H.COD_UNIDADE_NEGOCIO=N.COD_UNIDADE_NEGOCIO AND
> H.COD_MATRICULA=F.COD_MATRICULA AND
> H.COD_PROJETO=P.COD_PROJETO AND
> (DATA_HORAS >= '20030301') AND (DATA_HORAS <= '20030331')
> AND H.NUMERO_CAPEX=TC.NUMERO_CAPEX (+)
> AND H.ST_CAPITALIZAVEL <> 0
> ORDER BY N.DESCR_UNIDADE_NEGOCIO, NOME_FUNCIONARIO, DATA_HORAS,
> DESCR_PROJETO, DESCR_ATIVIDADE
>

(+) is the old-style Oracle syntax for an outer join. It's impossible to be
sure of the precise equivalent in standard SQL because your query doesn't
use an alias for the DATA_HORAS column, which means we can't tell what table
it belongs to. I think you you'll need something like the following:

SELECT H.COD_UNIDADE_NEGOCIO, ST_APROVADO_SUPERVISOR,
DATA_HORAS, QDE_HORAS, DESCR_PROJETO, DESCR_ATIVIDADE,
NOME_FUNCIONARIO, N.DESCR_UNIDADE_NEGOCIO, TC.NUMERO_CAPEX,
TC.DESCR_CAPEX
FROM TS_HORAS H
INNER JOIN TS_PROJETO P
ON H.COD_PROJETO=P.COD_PROJETO
INNER JOIN TS_ATIVIDADE A
ON H.COD_ATIVIDADE=A.COD_ATIVIDADE
INNER JOIN TS_FUNCIONARIO F
ON H.COD_MATRICULA=F.COD_MATRICULA
INNER JOIN TS_NEGOCIO N
ON H.COD_UNIDADE_NEGOCIO=N.COD_UNIDADE_NEGOCIO
LEFT OUTER JOIN TS_CAPEX TC
ON H.NUMERO_CAPEX=TC.NUMERO_CAPEX
WHERE DATA_HORAS >= '20030301'
AND DATA_HORAS < '20030401'
AND H.ST_CAPITALIZAVEL <> 0
ORDER BY N.DESCR_UNIDADE_NEGOCIO, NOME_FUNCIONARIO,
DATA_HORAS, DESCR_PROJETO, DESCR_ATIVIDADE;

Note also the change to the upper date range value and the use of < instead
of <=. In SQL Server, DATETIME columns always include time as well as date
so it's usually desirable not to exclude the hours after midnight in your
date ranges.

--
David Portas

AddThis Social Bookmark Button