PDA

Ver la Versión Completa : Como seleccionar datos de una columna en base a un dato de otra de la misma Tabla


Cristhor1982
28-05-2014, 15:03:24
Hola Amigos

Necesito una pequeña ayuda necesito hacer una consulta que me entregue unos valores de la misma tabla:

por ejemplo, tengo La tabla A, con campos A1, A2,A3; Ahora bien, el campo A1 tiene un dato que dice asi "Nombre (xxx)" y el campo A3 tiene un dato que dice asi "xxx". Necesito seleccionar todos los datos que el campo A3 esta contenido en A1.

me suena como asi: SELECT * FROM A WHERE A1 LIKE '%A3%'

Lo necesito hacer si utilizar variables dentro de la consulta.

Cristhor1982
28-05-2014, 16:31:42
select Bhd.bhd_id,bhd.name,bhd.traveldate,bhd.agent,bhd.status,bhd.consultant,bhd.reference,bhd.closed,bhd. full_reference,bhd.udtext3
From Bhd
Where Bhd.full_reference = Bhd.udtext3
And Status In ('cf','of')

Ojala Me Puedan Ayudar

Casimiro Notevi
28-05-2014, 16:49:43
Puede que asi:

select *
from tabla
where a1 containing a3

Cristhor1982
28-05-2014, 17:40:11
No me funciono

El tema es que están en lineas distintas, me imagino k debo hacer un ciclo no?...validando

Cristhor1982
28-05-2014, 18:30:46
De la base de datos:

En la columna B

Linea 1 Tengo por ejemplo la palabra "PVFT1"

y en la columna A

Linea 2 Tengo la palabra "RESERVA PVFT1"
Linea 3 Tengo la palabra "COPIA RESERVA PVFT1"

AHORA QUIERO MOSTRAS LOS TRES REGISTROS COMO LO HAGO?

ESO ES MAS O MENOS LO QUE NECESITO

Cristhor1982
28-05-2014, 22:17:13
El Caso Real

Name Date Agent St User Text Reference Cost Sell
Cristian Original 2014-11-15 Beneck Cf Corteg Pvft158716 260.4167 337.0000
Test Cristian 2014-11-15 Beneck Of Corteg Pvft158716 Pvft160449 20.8333

Son Dos Linea Distintas

Necesito Sumar Ambas Filas Que Queden En Una, Alguien Sabe?

Lo Unico Que Puedo Utilizar Como Para Relacionar Es Text Y Reference

Creo Que Se Utiliza Un Ciclo Para Almacenar Algun Tipo De Variable Algo Asi...

ecfisa
28-05-2014, 22:55:36
Hola Cristhor1982.

Omitiste un detalle importante y es con que RDBMS estas trabajando.

En Firebird podrías hacer:

SELECT *
FROM TABLA
WHERE A1 CONTAINING (SELECT FIRST 1 A3 FROM TABLA)

Que es una pequeña modificación del código que te puso Casimiro mas arriba, pero esto podría ser diferente para otro gestor de bd.

Saludos :)

Cristhor1982
28-05-2014, 22:58:32
Sql Server 2000 ...aun...CONTAINING no funciona en SQL.

No se ve muy bien el ejemplo real de lo que quiero...mmmm voy a tratar de dibujar la tabla...aca

aca va lo que tengo..mas o menos pero no me se como hacer un acumulador y que los junte en una linea.

El tema es que me entrega dos lineas distinta con un solo dato en comun que seria UDTEXT3 Y FULL_REFERENCE, y estos los necesito en una sola linea...:(

SELECT
dbo.BHD.NAME,
dbo.BHD.TRAVELDATE,
dbo.BHD.AGENT,
dbo.BHD.STATUS,
dbo.BHD.CONSULTANT,
dbo.BHD.UDTEXT3,
dbo.BHD.FULL_REFERENCE,
Sum(dbo.BSD.COST) AS COST,
dbo.BSD.SELL,
Sum(cast(BSD.AGENT as int)) AS AGENT,
Sum(BSD.AGENT-dbo.BSD.COST) AS MARGIN
FROM
dbo.BHD
INNER JOIN dbo.BSD ON dbo.BHD.BHD_ID = dbo.BSD.BHD_ID
INNER JOIN dbo.BSL ON dbo.BSD.BHD_ID = dbo.BSL.BHD_ID

WHERE BHD.STATUS IN ('CF','OF')
AND BHD.TRAVELDATE > '2014-11-01'
AND (BSD.BSL_ID='0')

GROUP BY dbo.BHD.NAME,dbo.BHD.TRAVELDATE,dbo.BHD.AGENT,dbo.BHD.STATUS,dbo.BHD.CONSULTANT,dbo.BHD.UDTEXT3,dbo. BHD.FULL_REFERENCE,BSD.COST,dbo.BSD.SELL,BSD.AGENT

ecfisa
28-05-2014, 23:08:55
Hola Cristhor1982.

Según acabo de leer, creo que en el caso de MS SQL Server tendrías que usar los operadores TOP (http://msdn.microsoft.com/en-us/library/ms189463.aspx) y CONTAINS (http://msdn.microsoft.com/en-us/library/ms187787.aspx), algo similar a:

SELECT *
FROM TABLA
WHERE A1 CONTAINS (SELECT TOP 1 A3 FROM TABLA)

Pero no estoy completamente seguro que funcione ya que no uso ese gestor.

Saludos :)

Cristhor1982
28-05-2014, 23:13:34
Hola Cristhor1982.

Según acabo de leer, creo que en el caso de MS SQL Server tendrías que usar el operador TOP (http://msdn.microsoft.com/en-us/library/ms189463.aspx), algo similar a:

SELECT *
FROM TABLA
WHERE A1 CONTAINING (SELECT TOP 1 A3 FROM TABLA)

Pero no estoy completamente seguro que funcione ya que no uso ese gestor.

Saludos :)

En realidad la base de datos es SQL, pero como gestor tengo un programa que se llama NAVICAT, es super sencillo, solo para consultas
pero containing no lo toma, quizas es el programa...ya que no es tan completo.

No crees que sea necesario, hacer un acumulador en la consulta?

Para poder dejar en una fila los datos ya sumados?...

Casimiro Notevi
28-05-2014, 23:16:12
Lee lo que ha escrito ecfisa.

ecfisa
28-05-2014, 23:20:13
Hola Cristhor1982.

Fijate que agregué CONTAINS (no había leido ese detalle en tu mensaje).

En cuanto a poner un acumulador depende de lo que este buscando hacer...

Saludos :)

Cristhor1982
28-05-2014, 23:21:18
Lee lo que ha escrito ecfisa.

He leido y probado con Contains, no funciona, por eso necesito de alguna otra ayuda...
:confused:

En pocas palabras la idea seria que si FULL_REFERENCE = UDTEXT3 sume los datos, el tema es que siempre estaran en filas distintas

ecfisa
28-05-2014, 23:38:45
Hola Cristhor1982.

Ya moví el hilo al foro MS SQL Server, que es frecuentado por compañeros que manejan este gestor. Es probable que en poco tiempo encuentres la respuesta a tu consulta.

Saludos :)

Cristhor1982
28-05-2014, 23:44:13
Hola Cristhor1982.

Ya moví el hilo al foro MS SQL Server, que es frecuentado por compañeros que manejan este gestor. Es probable que en poco tiempo encuentres la respuesta a tu consulta.

Saludos :)

Dale, muchas gracias...Saludos

Cristhor1982
29-05-2014, 18:01:22
Aca va un adjunto que clarifica mas

fjcg02
29-05-2014, 22:37:40
Has probado a meter la misma tabla dos veces en la consulta?

Select A.a, A.b, A.c, B.a
From tabla A
Inner JOIN tabla B on (A.b=B.c)

Reconcilias la misma tabla por campos diferentes...

Saludos

Cristhor1982
30-05-2014, 22:30:38
Has probado a meter la misma tabla dos veces en la consulta?

Select A.a, A.b, A.c, B.a
From tabla A
Inner JOIN tabla B on (A.b=B.c)

Reconcilias la misma tabla por campos diferentes...

Saludos

Hola como estas?, sabes que no me funciono!!!

Estoy probando otras formas...aun nada

Casimiro Notevi
30-05-2014, 22:32:52
Mejor pon aquí la estructura de la tabla, los campos y la sql que estás usando.

Cristhor1982
30-05-2014, 22:43:22
Mejor pon aquí la estructura de la tabla, los campos y la sql que estás usando.

SELECT
dbo.BHD.NAME,
dbo.BHD.TRAVELDATE,
dbo.BHD.AGENT,
dbo.BHD.STATUS,
dbo.BHD.CONSULTANT,
dbo.BHD.UDTEXT3,
dbo.BHD.FULL_REFERENCE,
Sum(dbo.BSD.COST) AS COST,
dbo.BSD.SELL,
Sum(cast(BSD.AGENT as int)) AS AGENT,
Sum(BSD.AGENT-dbo.BSD.COST) AS MARGIN
FROM
dbo.BHD
INNER JOIN dbo.BSD ON dbo.BHD.BHD_ID = dbo.BSD.BHD_ID
INNER JOIN dbo.BSL ON dbo.BSD.BHD_ID = dbo.BSL.BHD_ID


WHERE BHD.STATUS IN ('CF','OF')
AND BHD.TRAVELDATE > '2014-11-01'
AND (BSD.BSL_ID='0')
GROUP BY dbo.BHD.NAME,dbo.BHD.TRAVELDATE,dbo.BHD.AGENT,dbo.BHD.STATUS,
dbo.BHD.CONSULTANT,dbo.BHD.UDTEXT3,dbo.BHD.FULL_REFERENCE,BSD.COST,dbo.BSD.SELL,BSD.AGENT



ES ALGO ASI LO K TENGO, NO PUEDO PEGAR LA ESTRUCTURA ACA...

NAME / UDTEX3 / FULL_REFERENCE
CRISTIAN / / 165
CRISTIAN TEST / 165 / 214

NECESITO QUE ESAS DOS LINEAS QUEDEN TRANSFORMADAS EN UNA....CON LA RELACION DE FULL_REFERENCE (165) Y UDTEXT(165)

SE ENTIENDE :s

maxzama
03-12-2014, 22:06:28
Aqui te mando una idea:


combobox4.Clear; // limpiar
Dmodulo.municipio.SQL.Clear ; // limpiar
Dmodulo.municipio.SQL.Add('select * from municipio where municipio=:A'); // selecciono el campo maestro
Dmodulo.municipio.ParamByName('A').Value:=combobox3.Text; // veo si es igual
Dmodulo.municipio.Open; // abro
edit5.Text:=Dmodulo.municipio.FieldByName('CODIGOM').Value; // lo paso
Dmodulo.parroquia.SQL.Clear ; // limpio

Dmodulo.parroquia.SQL.Add('select * from parroquia where CODIGOM=:A'); // selecciono el campo
Dmodulo.parroquia.ParamByName('A').Value:=edit5.Text; // veo si es igual
Dmodulo.parroquia.Open; // abro
Dmodulo.parroquia.First; // lo mando a la primera fila
while not Dmodulo.parroquia.Eof do // hago un ciclo
begin
// Muestro el campo que quiero(El Detalle)
combobox4.Items.Add(DMODULO.parroquia.FieldByName('parroquia').AsString) ;
Dmodulo.parroquia.Next; // fnl
end;

Casimiro Notevi
04-12-2014, 09:50:06
Aqui te mando una idea:Código Delphi [-] combobox4.Clear; // limpiar Dmodulo.municipio.SQL.Clear ; // limpiar Dmodulo.municipio.SQL.Add('select * from municipio where municipio=:A'); // selecciono el campo maestro Dmodulo.municipio.ParamByName('A').Value:=combobox3.Text; // veo si es igual Dmodulo.municipio.Open; // abro edit5.Text:=Dmodulo.municipio.FieldByName('CODIGOM').Value; // lo paso Dmodulo.parroquia.SQL.Clear ; // limpio Dmodulo.parroquia.SQL.Add('select * from parroquia where CODIGOM=:A'); // selecciono el campo Dmodulo.parroquia.ParamByName('A').Value:=edit5.Text; // veo si es igual Dmodulo.parroquia.Open; // abro Dmodulo.parroquia.First; // lo mando a la primera fila while not Dmodulo.parroquia.Eof do // hago un ciclo begin // Muestro el campo que quiero(El Detalle) combobox4.Items.Add(DMODULO.parroquia.FieldByName('parroquia').AsString) ; Dmodulo.parroquia.Next; // fnl end;
Eso no es SQL.