Pregunta:
¿Consulta SQL con datos tipo String?
CarlosUC7
2010-10-26 07:44:20 UTC
Anteriormente hize una pregunta sobre seleccionar la fecha mas reciente y pues ya lo realize, gracias a ustedes por darme ideas, las fusione y lo solucione. Bueno ahora mi problema es el siguiente. Tengo los siguientes datos:

Cod Producto - Stock Actual - FechaVencimiento - NumLote
PLG 0001 - 50.000 - 30/07/2012 - 007589
PLG 0001 - 50.000 - 30/07/2012 - 7589
PLG 0001 - 50.000 - 30/07/2012 - LT007589
PLG 0001 - 50.000 - 30/07/2012 - LT7589

Si se dan cuenta, es el mismo producto, pero lo han ingresado varias veces, y lo peor de todo es que como el Numero de Lote es string, lo han agregado de forma diferente, porque para nosotros 007589 = 7589 = LT007589 = LT7589, pero para el lenguaje SQL no es lo mismo.

Deseria porfavor, una consulta que me muestre el primer string registrado. No funcionaria WHERE NUMLOTE = '7589' porque yo quiero un query general ya que no solo tengo ese producto, tengo miles de productos y seria mejor mostrarme el primer string registrado ya que en la BD existen productos que tienen 1 o varios tipos de string ingresados por ejemplo:

PLG 0001 - 50.000 - 30/07/2012 - 007589
PLG 0001 - 50.000 - 30/07/2012 - 7589
PLG 0001 - 50.000 - 30/07/2012 - LT007589
PLG 0001 - 50.000 - 30/07/2012 - LT7589
PLG 0002 - 60.000 - 01/07/2012 - 004001
PLG 0002 - 60.000 - 01/07/2012 - 4001
PLG 0003 - 40.000 - 15/07/2012 - LT2002

Aqui por ejemplo el producto co codigo 0001 tiene 4 ingresos de string, el codigo 0002 tiene solo 2 ingresos y el 0003 solo tiene 1.

Porfavor, no mandarme ejemplos de PHP porque yo solo estoy trabajando en la misma base de datos sql. Le agradezco su ayuda desde ya. Saludos.
Tres respuestas:
Dan
2010-10-26 09:46:03 UTC
Suponiendo que tu No de Lote DEBE de tener una parte entera al final de la cadena, la solucion que veo es la siguiente.



Crea una funcion en donde te devuelva esa parte entera como un tipo de dato INT:



----------------------------------------------------------------------------------------------------------------------------->>

set ANSI_NULLS ON

set QUOTED_IDENTIFIER ON

GO



CREATE FUNCTION [dbo].[fn_LoteToInt]

(

@lote nvarchar(10)

)

RETURNS int

AS

BEGIN



declare @tam int

declare @i int

declare @num nvarchar(10)



set @tam = Len(@lote)

set @i = 0

set @num = ''

WHILE (@i<=@tam)

BEGIN

if (Isnumeric(Substring(@lote,@i,1)) = 1)

set @num = @num + Substring(@lote,@i,1)

set @i = @i+1

END

return convert(int,@num)



END

---<<--------------------------------------------------------------------------------------------------------------------------



y en tu Store Procedure algo asi:



----------------------------------------------------------------------------------------------------------------------------->>

-->> ----- Creacion de la tabla ejemplo-----------

DECLARE @tabla TABLE

(

CodProducto nvarchar(10),

stock int,

NumLote nvarchar(10)

)



insert into @tabla values ('PLG 0001',50,'007589')

insert into @tabla values ('PLG 0001',50,'7589')

insert into @tabla values ('PLG 0001',50,'LT007589')

insert into @tabla values ('PLG 0001',50,'LT7589')

insert into @tabla values ('PLG 0002',60,'004001')

insert into @tabla values ('PLG 0002',60,'4001')

insert into @tabla values ('PLG 0003',40,'LT2002')

--<<--fin tabla ejemplo----------------------------



select * from @tabla



update @tabla

set NumLote = convert(nvarchar(10),

dbo.fn_LoteToInt(NumLote))



select * from @tabla

select distinct * from @tabla

--<<---------------------------------------------------------------------------------------------------------------------------



veras que el último select tiene solo los tres registros deseados. ya con eso podras borrar los registros duplicados, o manipular la tabla como deseés



Esto está en SQL Server, espero te pueda servir

Suerte!
Rompe_tuercas
2010-10-26 15:00:14 UTC
Necesitas una consulta que te elimine duplicados como esto



delete from Tabla1 where Id >

(

Select min(Id) from Tabla1 Tbl1 where Tabla1.Campo2 = Tbl1.Campo2 and Tabla1.Campo3 = Tbl1.Campo3

)



creo que deberias verificar la unicidad o llave principal de tu tabla para que no tengas esto detalles.

Saludos
Edgar E
2010-10-26 14:52:07 UTC
si te entendi bien no es muy dificil solucionar tu problema dile a la consulta que te compare el registro con cada una de las posibles entradas para el número de lote ya que por lo que veo solo varia en 4 formas de ingresar los datos


Este contenido se publicó originalmente en Y! Answers, un sitio web de preguntas y respuestas que se cerró en 2021.
Loading...