Usuário com melhor resposta
Função Minus SQL Server

Pergunta
-
Galera, Feliz Natal
Gostaria de utilizar a função em SQL chamada MINUS, porém já vi uns exemplos e não entendi muito a lógica o meu caso.
Vejam o meu cenário.
Tenho uma tabela onde armazeno todas as informações dos meus empregados (Empregado_ID, Nome, etc) e tenho uma tabela que faz a referência desses empregados na tabela Escala, que recebe dados como Data, Status do funcionário (folga, férias, atestado) e a própria ID do empregado, no meu caso, Empregado_ID.O que desejo fazer é o seguinte, em uma determinada drop, ele receba todos os empregados - os empregados que já foram inseridos na tabela de escala em determinada data, ou seja, estarei inserindo na tabela de escala os empregados e conforme ele for inserido nela, ele vai sendo retirado da drop, através dessa instrução minus.
O problema que eu me deparo é exatamente com o mesmo número de Selects que deve ter que estão ocorrendo erros.
Se alguém tem alguma idéia de como me auxiliar, fico grato.
Até mais
Respostas
-
Galera,
Consegui chegar a seguinte solução que ao invés de = usar IN (Valeu Marcelo) e a stored ficou assim.
CREATE PROCEDURE BUSCAR_MOTORISTAS_DISPONIVEIS
@DATA AS SMALLDATETIME
AS
SELECT EMPREGADO_ID, NOME
FROM EMPREGADO_TBL
WHERE EMPREGADO_ID IN(
SELECT EMPREGADO_ID FROM EMPREGADO_TBL
EXCEPT
SELECT ITEM_DA_ESCALA_TBL.EMPREGADO_ID
FROM ESCALA_TBL INNER JOIN ITEM_DA_ESCALA_TBL ON ESCALA_TBL.ESCALA_ID = ITEM_DA_ESCALA_TBL.ESCALA_ID
WHERE ESCALA_TBL.DATA = @DATA
)Obrigado pela força pessoal.
Todas as Respostas
-
-
-
-
Achei a seguinte solução.
SELECT EMPREGADO_ID, NOME
FROM EMPREGADO_TBL
WHERE EMPREGADO_ID =
(SELECT EMPREGADO_ID
FROM EMPREGADO_TBL
EXCEPT
SELECT EMPREGADO_ID
FROM ITEM_DA_ESCALA_TBL)Com a função MINUS não funcionou, mas com o EXCEPT funcionou muito bem, gerou os resultados esperados.
Inicialmente ele me seleciona somente as ID's dos empregados que não estão na escala (empregados que não estão de folga, atestados ou férias) e posterior me mostra os nomes e as ID para abastecer minha caixa de seleção.
Valeu pela força galera
-
Quando fiz a instrução não pensei nos vários registros que pudessem retornar, aí ela só funciona com um registros e não com vários, por que de uma relação de 10 empregados por exemplo, teremos 2 de folga e o resto está trabalhando, só que do meu jeito não du muito certo essa parte, eu consigo, saber somente quais são as ID's, mas os nomes as quais se referem eu não consigo saber.
Alguém tem alguma idéia?
-
-
Galera,
Consegui chegar a seguinte solução que ao invés de = usar IN (Valeu Marcelo) e a stored ficou assim.
CREATE PROCEDURE BUSCAR_MOTORISTAS_DISPONIVEIS
@DATA AS SMALLDATETIME
AS
SELECT EMPREGADO_ID, NOME
FROM EMPREGADO_TBL
WHERE EMPREGADO_ID IN(
SELECT EMPREGADO_ID FROM EMPREGADO_TBL
EXCEPT
SELECT ITEM_DA_ESCALA_TBL.EMPREGADO_ID
FROM ESCALA_TBL INNER JOIN ITEM_DA_ESCALA_TBL ON ESCALA_TBL.ESCALA_ID = ITEM_DA_ESCALA_TBL.ESCALA_ID
WHERE ESCALA_TBL.DATA = @DATA
)Obrigado pela força pessoal.
-
Marcelo,
É que aprendemos utilizando a função MINUS e eu nunca tinha feito esse tipo de instrução SQL funcionar, mas percebi em um livro de SQL que o operador MINUS não existe em SQL SERVER e sim somente o EXCEPT (ao menos na referência que tenho 'Aprenda em 24 Horas SQL3')
Valeu pela força
-
-