Advertisement
Kimossab

SIBD - Queries (PROJ)

Jun 26th, 2015
279
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 6.14 KB | None | 0 0
  1. /* GROUP BY */
  2. /*Numero de turnos que os motoristas fizeram numa viagem com mais do que 1 turno*/
  3.  
  4. SELECT N__VIAGEM AS [Numero Viagem], COUNT(N__TURNO) AS [Numero de Turnos], NOME AS [Nome]
  5.     FROM TURNOS t JOIN MOTORISTA m
  6.         ON t.N__CARTA = m.N__CARTA JOIN FUNCIONARIOS f
  7.             ON m.N__FUNC = f.N__FUNC
  8.     GROUP BY N__VIAGEM, NOME
  9.     HAVING COUNT(N__TURNO) > 1
  10.     ORDER BY [Numero Viagem], [Numero de Turnos]
  11.  
  12. /* numero reparaçoes e serviços e custo total das reparaçoes de um veiculo */
  13. SELECT v.N__VEICULO AS [ID Veiculo], COUNT(r.N__REPARACAO) AS [Total de Reparações], COUNT(s.N__SERVICO) AS [Total de Serviços], SUM(PRECO) AS [Total Custos]
  14.     FROM VEICULOS v JOIN REPARACOES r
  15.         ON v.N__VEICULO = r.N__VEICULO JOIN REPARACOES_SERVICOS rs
  16.             ON r.N__REPARACAO = rs.N__REPARACAO JOIN SERVICOS s
  17.                 ON s.N__SERVICO = rs.N__SERVICO
  18.     GROUP BY v.N__VEICULO
  19.     ORDER BY [Total Custos] DESC
  20.  
  21. /*SUBQUERY*/
  22. SELECT NOME AS [Nome]
  23.     FROM FUNCIONARIOS f JOIN MOTORISTA m
  24.         ON f.N__FUNC = m.N__FUNC
  25.     WHERE m.N__CARTA IN (SELECT t.N__CARTA FROM TURNOS t JOIN VIAGENS v ON t.N__VIAGEM = v.N__VIAGEM JOIN INFORMACAO_VIAGEM iv ON v.N__VIAGEM = iv.N__VIAGEM WHERE iv.TIPO_INFO_V LIKE 'Carga')
  26.  
  27. /*INNER*/
  28. /*estado dos veiculos das viagens começadas a pelo menos 7 dias atras da data atual*/
  29. SELECT DISTINCT v.N__VIAGEM AS [ID Viagem], v.N__VEICULO AS [ID Veículo], ESTADO AS [Estado]
  30.     FROM VIAGENS v JOIN VEICULOS ve
  31.         ON ve.N__VEICULO = v.N__VEICULO
  32.     WHERE v.DIA_PARTIDA >= getdate()-7
  33.  
  34. /*mercadorias fornecidas por cada fornecedor*/
  35. SELECT NOME AS [Nome], DESCRICAO_MERC AS [Mercadoria], 'Carga' AS [Tipo]
  36.     FROM FORNECEDOR f JOIN ENTIDADE_COMERCIAL ec
  37.         ON f.COD_EC = ec.COD_EC JOIN INFORMACAO_VIAGEM iv
  38.             ON ec.COD_EC = iv.COD_EC JOIN MERCADORIA m
  39.                 ON iv.N__MERCADORIA = m.N__MERCADORIA
  40.     WHERE iv.TIPO_INFO_V LIKE 'Carga'
  41. UNION
  42. SELECT NOME AS [Nome], DESCRICAO_MERC AS [Mercadoria], 'Descarga' AS [Tipo]
  43.     FROM CLIENTE c JOIN ENTIDADE_COMERCIAL ec
  44.         ON c.COD_EC = ec.COD_EC JOIN INFORMACAO_VIAGEM iv
  45.             ON ec.COD_EC = iv.COD_EC JOIN MERCADORIA m
  46.                 ON iv.N__MERCADORIA = m.N__MERCADORIA
  47.     WHERE iv.TIPO_INFO_V LIKE 'Descarga'
  48.     ORDER BY [Tipo]
  49.  
  50. /*PROCEDIMENTOS*/
  51. GO
  52.  
  53. CREATE PROC Editar_Motorista
  54. @NCarta INT, @NFun INT, @Tipo VARCHAR(50), @ObsM VARCHAR(250), @NCartaS VARCHAR(15)
  55. AS
  56. BEGIN
  57.     UPDATE MOTORISTA SET
  58.     N__CARTA = @NCarta,
  59.     N__FUNC = @NFun,
  60.     TIPO = @Tipo,
  61.     OBS_MEDICAS = @ObsM,
  62.     N__CARTA_S = @NCartaS
  63.     WHERE N__CARTA_S = @NCartaS
  64. END
  65.  
  66. GO
  67.  
  68. SELECT * FROM MOTORISTA
  69.  
  70. GO
  71.  
  72. CREATE PROC Inserir_Motorista
  73. @NCarta INT, @NFun INT, @Tipo VARCHAR(50), @ObsM VARCHAR(250), @NCartaS VARCHAR(15)
  74. AS
  75.     IF EXISTS(SELECT * FROM FUNCIONARIOS WHERE N__FUNC = @NFun)
  76.         BEGIN
  77.             INSERT INTO MOTORISTA
  78.             VALUES(@NCarta, @NFun, @Tipo, @ObsM, @NCartaS)
  79.         END
  80. GO
  81.  
  82. /*FUNÇÃO*/
  83. /*VEICULOS POR FILIAL NAO REPARADOS*/
  84. IF OBJECT_ID('dbo.fnCamSemRepFromFil') IS NOT NULL
  85.     DROP FUNCTION dbo.fnCamSemRepFromFil
  86. GO
  87. CREATE FUNCTION fnCamSemRepFromFil(@fil INT)
  88. RETURNS INT
  89. BEGIN
  90.     RETURN (SELECT COUNT(*) FROM FILIAIS f JOIN VEICULOS v
  91.                 ON f.CODFILIAIS = v.CODFILIAIS
  92.             WHERE f.CODFILIAIS = @fil)
  93.         -
  94.         (SELECT COUNT(v.N__VEICULO) FROM FILIAIS f JOIN VEICULOS v
  95.             ON f.CODFILIAIS = v.CODFILIAIS
  96.         WHERE f.CODFILIAIS = @fil AND v.N__VEICULO IN (SELECT N__VEICULO FROM REPARACOES))
  97. END
  98.  
  99. GO
  100.  
  101. /*CURSOR*/
  102. DECLARE CURSOR_FilCam CURSOR
  103. FORWARD_ONLY
  104. READ_ONLY
  105. FOR
  106.     SELECT CODFILIAIS FROM FILIAIS
  107.  
  108. OPEN CURSOR_FilCam
  109. DECLARE @ID INT
  110. FETCH FROM CURSOR_FilCam INTO @ID
  111.  
  112. WHILE @@FETCH_STATUS = 0
  113.     BEGIN
  114.         PRINT 'Número de camiões que nunca foram reparados da filial com ID ' + CONVERT(VARCHAR,@ID) + ': ' + CONVERT(VARCHAR,dbo.fnCamSemRepFromFil(@ID))       
  115.         FETCH FROM CURSOR_FilCam INTO @ID
  116.     END
  117.  
  118. CLOSE CURSOR_FilCam
  119. DEALLOCATE CURSOR_FilCam
  120.  
  121. /*TRIGGERS*/
  122.  
  123. GO
  124.  
  125. IF OBJECT_ID('OnUpdate') IS NOT NULL
  126.     DROP TRIGGER OnUpdate
  127. GO
  128.  
  129. CREATE TRIGGER OnUpdate
  130.     ON MERCADORIA
  131.     AFTER UPDATE
  132. AS
  133. BEGIN
  134.     DECLARE @NMercadoria INT,
  135.             @Peso INT,
  136.             @DESC VARCHAR(50),
  137.             @Qt INT,
  138.             @Tipo VARCHAR(50)
  139.  
  140.  
  141.     SELECT @NMercadoria = N__MERCADORIA,
  142.             @Qt = QUANTIDADE,
  143.             @Peso = PESO,
  144.             @DESC = DESCRICAO_MERC,
  145.             @Qt = QUANTIDADE,
  146.             @Tipo = TIPO_MERC
  147.     FROM INSERTED
  148.     IF @Qt > 0 AND @Peso > 0
  149.         UPDATE MERCADORIA SET PESO=@Peso, DESCRICAO_MERC=@DESC, QUANTIDADE=@Qt, TIPO_MERC=@Tipo WHERE N__MERCADORIA=@NMercadoria
  150.     ELSE IF @Qt <= 0
  151.     BEGIN
  152.         SELECT @NMercadoria = N__MERCADORIA,
  153.                 @Qt = QUANTIDADE,
  154.                 @Peso = PESO,
  155.                 @DESC = DESCRICAO_MERC,
  156.                 @Qt = QUANTIDADE,
  157.                 @Tipo = TIPO_MERC
  158.         FROM DELETED
  159.         UPDATE MERCADORIA SET PESO=@Peso, DESCRICAO_MERC=@DESC, QUANTIDADE=@Qt, TIPO_MERC=@Tipo WHERE N__MERCADORIA=@NMercadoria;
  160.         RAISERROR('A quantidade nao pode ser abaixo de 1.',11,1)
  161.     END
  162.     ELSE
  163.     BEGIN
  164.         SELECT @NMercadoria = N__MERCADORIA,
  165.                 @Qt = QUANTIDADE,
  166.                 @Peso = PESO,
  167.                 @DESC = DESCRICAO_MERC,
  168.                 @Qt = QUANTIDADE,
  169.                 @Tipo = TIPO_MERC
  170.         FROM DELETED
  171.         UPDATE MERCADORIA SET PESO=@Peso, DESCRICAO_MERC=@DESC, QUANTIDADE=@Qt, TIPO_MERC=@Tipo WHERE N__MERCADORIA=@NMercadoria;
  172.         RAISERROR('O peso nao pode ser abaixo de 1.',11,1)
  173.     END
  174. END
  175.  
  176. IF OBJECT_ID('OnInsert') IS NOT NULL
  177.     DROP TRIGGER OnInsert
  178.  
  179. GO
  180.  
  181. CREATE TRIGGER OnInsert
  182.     ON MERCADORIA
  183.     INSTEAD OF INSERT
  184. AS
  185. BEGIN
  186.     DECLARE @NMercadoria INT,
  187.             @Peso INT,
  188.             @DESC VARCHAR(50),
  189.             @Qt INT,
  190.             @Tipo VARCHAR(50)
  191.  
  192.     SELECT @NMercadoria = N__MERCADORIA,
  193.             @Qt = QUANTIDADE,
  194.             @Peso = PESO,
  195.             @DESC = DESCRICAO_MERC,
  196.             @Qt = QUANTIDADE,
  197.             @Tipo = TIPO_MERC
  198.     FROM INSERTED
  199.  
  200.     IF @Qt > 0 AND @Peso > 0 AND (@NMercadoria NOT IN (SELECT N__MERCADORIA FROM MERCADORIA))
  201.         INSERT INTO MERCADORIA VALUES (@NMercadoria,@Peso,@DESC,@Qt,@Tipo)
  202.     ELSE IF @Qt <= 0
  203.         RAISERROR('A quantidade nao pode ser abaixo de 1.',11,1)
  204.     ELSE IF @Peso <= 0
  205.         RAISERROR('O peso nao pode ser abaixo de 1.',11,1)
  206.     ELSE
  207.         RAISERROR('Esse número de mercadoria já existe na Base de Dados.',11,1)
  208. END
  209.  
  210. GO
  211.  
  212. UPDATE MERCADORIA SET PESO=-1 WHERE N__MERCADORIA=1
  213. SELECT * FROM MERCADORIA
  214. UPDATE MERCADORIA SET PESO=24000 WHERE N__MERCADORIA=1
  215. SELECT * FROM MERCADORIA
  216. INSERT INTO MERCADORIA VALUES (6,200,'ola',50,'oi')
  217. SELECT * FROM MERCADORIA
  218.  
  219. DELETE FROM MERCADORIA WHERE N__MERCADORIA = 6
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement