Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   Como seleccionar datos de una columna en base a un dato de otra de la misma Tabla (https://www.clubdelphi.com/foros/showthread.php?t=85938)

Cristhor1982 28-05-2014 15:03:24

Como seleccionar datos de una columna en base a un dato de otra de la misma Tabla
 
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

Asi se entiende un poco mas?
 
Código SQL [-]
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:

Código SQL [-]
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

Como seleccionar datos de una columna en base a un dato de otra de la misma Tabla
 
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:
Código SQL [-]
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

Como seleccionar datos de una columna en base a un dato de otra de la misma Tabla
 
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...:(

Código SQL [-]
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 y CONTAINS, algo similar a:
Código SQL [-]
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

Cita:

Empezado por ecfisa (Mensaje 476948)
Hola Cristhor1982.

Según acabo de leer, creo que en el caso de MS SQL Server tendrías que usar el operador TOP, algo similar a:
Código SQL [-]
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

Como seleccionar datos de una columna en base a un dato de otra de la misma Tabla
 
Cita:

Empezado por Casimiro Notevi (Mensaje 476952)
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

Cita:

Empezado por ecfisa (Mensaje 476955)
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

Como seleccionar datos de una columna en base a un dato de otra de la misma Tabla
 
1 Archivos Adjunto(s)
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

Cita:

Empezado por fjcg02 (Mensaje 477001)
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

Como seleccionar datos de una columna en base a un dato de otra de la misma Tabla
 
Cita:

Empezado por Casimiro Notevi (Mensaje 477067)
Mejor pon aquí la estructura de la tabla, los campos y la sql que estás usando.

Código SQL [-]
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


La franja horaria es GMT +2. Ahora son las 06:25:52.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi