Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Error al mostrar horas

Estas en el tema de Error al mostrar horas en el foro de SQL Server en Foros del Web. Hola a todos una consulta como hago para que me muestre las horas disponibles y de una mesa por un determinada fecha el script q ...
  #1 (permalink)  
Antiguo 04/04/2013, 23:07
 
Fecha de Ingreso: abril-2012
Ubicación: surquillo
Mensajes: 44
Antigüedad: 12 años
Puntos: 0
Error al mostrar horas

Hola a todos una consulta como hago para que me muestre las horas disponibles y de una mesa por un determinada fecha el script q tengo me da el resultado pero me vota el mismo resultado cuando quiero ver las horas de las mesas reservadas en otras fechas .. Gracias
Código SQL:
Ver original
  1. CREATE DATABASE ULTIMARESE
  2. GO
  3. USE ULTIMARESE
  4.  
  5. DROP TABLE MESA
  6. DROP TABLE HORARIOS
  7. DROP TABLE RESERVACIONES
  8. DROP TABLE #horarios_ocupados
  9. DROP TABLE #temp
  10.  
  11. CREATE TABLE MESA(
  12. COD_MESA INT IDENTITY(1,1)PRIMARY KEY,
  13. MESA_DESC VARCHAR(30) ,
  14. MESA_SILLAS INT ,
  15. SEDE_COD CHAR(6),
  16. MESA_FILA INT,
  17. MESA_COLUMNA INT,
  18. MESA_ESTADO CHAR(1) ,
  19. MESA_TIPO   CHAR(1),
  20. MESA_PRECIO DECIMAL(7,2),
  21. MESA_IMG VARCHAR(20)
  22. )
  23. GO
  24. INSERT INTO MESA VALUES('MESA D-30',12,'SED004',6,5,'2','0',10.00,'MESA_12.jpg')
  25. INSERT INTO MESA VALUES('MESA D-31',12,'SED004',6,5,'2','0',10.00,'MESA_12.jpg')
  26. GO
  27. SELECT * FROM MESA
  28. GO
  29.  
  30. CREATE TABLE HORARIOS(
  31. COD_HORA INT IDENTITY(1,1)PRIMARY KEY,
  32. HORA_INICIO TIME
  33. )
  34.  
  35. INSERT INTO HORARIOS VALUES ('08:00')
  36. INSERT INTO HORARIOS VALUES ('09:00')
  37. INSERT INTO HORARIOS VALUES ('10:00')
  38. INSERT INTO HORARIOS VALUES ('11:00')
  39. INSERT INTO HORARIOS VALUES ('12:00')
  40. INSERT INTO HORARIOS VALUES ('13:00')
  41. INSERT INTO HORARIOS VALUES ('14:00')
  42. INSERT INTO HORARIOS VALUES ('15:00')
  43. INSERT INTO HORARIOS VALUES ('16:00')
  44. INSERT INTO HORARIOS VALUES ('17:00')
  45. INSERT INTO HORARIOS VALUES ('18:00')
  46. INSERT INTO HORARIOS VALUES ('19:00')
  47. INSERT INTO HORARIOS VALUES ('20:00')
  48. INSERT INTO HORARIOS VALUES ('21:00')
  49. GO
  50. SELECT * FROM HORARIOS
  51. GO
  52.  
  53. CREATE TABLE RESERVACIONES(
  54. COD_RESE INT IDENTITY(1,1)PRIMARY KEY,
  55. RESE_REGISTRO   DATE ,
  56. RESE_FECHA  DATE ,
  57. RESE_NPER   INT ,
  58. HORA_COD    INT ,
  59. RESE_HORAS  TIME ,
  60. RESE_ESTADO CHAR(1),
  61. CLI_COD CHAR(6)NULL,
  62. MESA_COD INT,
  63. CONSTRAINT FK_RESER_HORA FOREIGN KEY (HORA_COD) REFERENCES HORARIOS(COD_HORA),
  64. CONSTRAINT FK_RESER_MESA FOREIGN KEY (MESA_COD) REFERENCES MESA(COD_MESA)
  65. )
  66. GO
  67. SELECT RESE_HORAS,HORA_COD FROM RESERVACIONES
  68. GO
  69. INSERT INTO RESERVACIONES VALUES (GETDATE(),dateadd(DAY,2,GETDATE()),4,2,'11:00','0','CLI001',1)
  70. INSERT INTO RESERVACIONES VALUES (GETDATE(),dateadd(DAY,1,GETDATE()),4,3,'11:00','0','CLI001',1)
  71. INSERT INTO RESERVACIONES VALUES (GETDATE(),GETDATE(),4,1,'10:00','0','CLI001',1)
  72. INSERT INTO RESERVACIONES VALUES (GETDATE(),GETDATE(),4,3,'12:00','0','CLI001',2)
  73. INSERT INTO RESERVACIONES VALUES (GETDATE(),GETDATE(),4,1,'10:00','0','CLI001',1)
  74.  
  75. GO
  76. --Horas ocupadas
  77. SELECT M.MESA_DESC,H.HORA_INICIO,R.RESE_HORAS,R.RESE_FECHA
  78. FROM RESERVACIONES AS r,HORARIOS AS h, MESA AS m
  79. WHERE R.HORA_COD=H.COD_HORA AND M.COD_MESA=R.MESA_COD AND R.RESE_fECHA='04/05/2013'--   convert(varchar(20),GETDATE(),101)
  80. AND MESA_COD=COD_MESA AND H.COD_HORA IN (SELECT COD_HORA
  81. FROM HORARIOS WHERE (HORA_INICIO BETWEEN '00:00' AND '23:00') AND (R.RESE_HORAS
  82.  BETWEEN  '00:00' AND '23:00') )
  83. ORDER BY M.MESA_DESC
  84.  
  85. --Horas Libres
  86.  
  87. DROP TABLE #temp
  88. DROP TABLE #horarios_ocupados
  89.  
  90. SELECT HORA_INICIO,RESE_HORAS,MESA_COD,RESE_FECHA,IDENTITY(INT,1,1) AS rn INTO #temp
  91. FROM HORARIOS,RESERVACIONES
  92. WHERE HORARIOS.COD_HORA=RESERVACIONES.HORA_COD
  93.  
  94. SELECT * FROM #temp
  95.  
  96. CREATE TABLE #horarios_ocupados
  97. (
  98. id INT,
  99. id_mesa INT,
  100. r_fecha DATE
  101. )
  102.  
  103. DECLARE @x INT
  104. DECLARE @id_mesa INT
  105. DECLARE @fecha VARCHAR(20)
  106. SET @x=1
  107. SET @id_mesa=0
  108. SET @fecha='04/05/2013'
  109. while @x<=(SELECT COUNT(*) FROM #temp)
  110. BEGIN
  111. SELECT @id_mesa=MESA_COD FROM #temp WHERE rn=@x
  112. INSERT INTO #horarios_ocupados
  113. SELECT COD_HORA,@id_mesa,@fecha FROM HORARIOS h,#temp t
  114. WHERE h.HORA_INICIO BETWEEN (SELECT HORA_INICIO FROM #temp WHERE rn=@x)
  115. AND (SELECT RESE_HORAS FROM #temp WHERE rn=@x)AND RESE_FECHA='04/05/2013'
  116. SET @x=@x+1
  117. END
  118.  
  119.  
  120. SELECT DISTINCT HORA_INICIO,MESA_DESC,RESE_FECHA FROM RESERVACIONES AS r,HORARIOS AS h, MESA AS m,#horarios_ocupados
  121. WHERE RESE_FECHA='04/06/2013'--convert(varchar(20),GETDATE(),101) AND RESE_NPER NOT BETWEEN 0 AND 4-1
  122. AND CONVERT(VARCHAR(20),H.COD_HORA) + '|' + CONVERT(VARCHAR(20),M.COD_MESA) NOT IN (
  123. SELECT CONVERT(VARCHAR(20),id) + '|' + CONVERT(VARCHAR(20),id_mesa)
  124. FROM #horarios_ocupados)
  125. ORDER BY MESA_DESC
  126.  
  127. DELETE FROM #horarios_ocupados
  128. SELECT * FROM MESA
  129. SELECT * FROM RESERVACIONES
  130. SELECT * FROM HORARIOS
  131. SELECT * FROM #temp
  132. SELECT * FROM #horarios_ocupados
  133.  
  134. GO
  135.  
  136.  
  137. DROP TABLE MESA
  138. DROP TABLE HORARIOS
  139. DROP TABLE RESERVACIONES
  140. DROP TABLE #horarios_ocupados
  141. DROP TABLE #temp
  142.  
  143. USE SR_OOD

Última edición por gnzsoloyo; 05/04/2013 a las 04:26 Razón: SQL sin etiquetar. Mayusculas en todo el texto son girtos...
  #2 (permalink)  
Antiguo 05/04/2013, 09:31
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Error al mostrar horas

me gusta ver mi codigo implementado jejeje :)

creo que no has entendido nada de mi codigo :(


Este codigo lo que hace es sacarte las mesas libres por "DIA" solo por cada dia, por eso te he recomendado que hagas una funcion con toooodo este codigo, si buscas resultados de dias diferentes al que pusiste en la tabla de #horarios_ocupados no los vas a encontrar porque? porque esa tabla maneja los datos por "DIA"

Código SQL:
Ver original
  1. --Horas Libres
  2.  
  3. DROP TABLE #temp
  4. DROP TABLE #horarios_ocupados
  5.  
  6. SELECT HORA_INICIO,RESE_HORAS,MESA_COD,RESE_FECHA,IDENTITY(INT,1,1) AS rn INTO #temp
  7. FROM HORARIOS,RESERVACIONES
  8. WHERE HORARIOS.COD_HORA=RESERVACIONES.HORA_COD
  9.  
  10. SELECT * FROM #temp
  11.  
  12. CREATE TABLE #horarios_ocupados
  13. (
  14. id INT,
  15. id_mesa INT,
  16. r_fecha DATE
  17. )
  18.  
  19. DECLARE @x INT
  20. DECLARE @id_mesa INT
  21. DECLARE @fecha VARCHAR(20)
  22. SET @x=1
  23. SET @id_mesa=0
  24. SET @fecha='04/05/2013'
  25. while @x<=(SELECT COUNT(*) FROM #temp)
  26. BEGIN
  27. SELECT @id_mesa=MESA_COD FROM #temp WHERE rn=@x
  28. INSERT INTO #horarios_ocupados
  29. SELECT COD_HORA,@id_mesa,@fecha FROM HORARIOS h,#temp t
  30. WHERE h.HORA_INICIO BETWEEN (SELECT HORA_INICIO FROM #temp WHERE rn=@x)
  31. AND (SELECT RESE_HORAS FROM #temp WHERE rn=@x)AND RESE_FECHA='04/05/2013'
  32. SET @x=@x+1
  33. END


-------------

con la explicacion pasada creo que comprenderas que aqui no puedes buscar resultados diferentes del dia 04/05/2013

-----------------------------

Código SQL:
Ver original
  1. SELECT DISTINCT HORA_INICIO,MESA_DESC,RESE_FECHA FROM RESERVACIONES AS r,HORARIOS AS h, MESA AS m,#horarios_ocupados
  2. WHERE RESE_FECHA='04/06/2013'--convert(varchar(20),GETDATE(),101) AND RESE_NPER NOT BETWEEN 0 AND 4-1
  3. AND CONVERT(VARCHAR(20),H.COD_HORA) + '|' + CONVERT(VARCHAR(20),M.COD_MESA) NOT IN (
  4. SELECT CONVERT(VARCHAR(20),id) + '|' + CONVERT(VARCHAR(20),id_mesa)
  5. FROM #horarios_ocupados)
  6. ORDER BY MESA_DESC

Ahora el codigo que te pase puedes implementarlo en tu aplicacion pero como una funcion no como TSQL porque no te funcionaria en una aplicacion web.....ya tienes el codigo suficiente para hacer tu proceso es solo que juegues un poco con el y entiendas realmente que hace...

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: horas, insert, registro, select
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:47.