SQL - Subconsulta con mas de una columna

   
Vista:

Subconsulta con mas de una columna

Publicado por Erasmo erasmorc@hotmail.com (15 intervenciones) el 28/06/2012 19:09:26
Hola a todos.

Tengo una consulta en sql 2008 que busca algunas columnas en una tabla, selecciona datos de otras dos tablas a traves de left join y que tiene una subconsulta. Hasta ahi todo va bien, el problema radica en que el campo que estoy desplegando en la subconsulta es un codigo y tiene una descrpcion que esta almacenada en otra tabla. Me gustaria poder relacionar ese campo de esa tabla con la tabla en donde esta la descrpcion. A continuacion el query que estoy utilizando.

SELECT A.SRVSTAT AS ID_ESTATUS, C.STSDESCR AS ESTATUS, A.SRVTYPE AS TIPO, A.CUSTNMBR AS ID_CLIENTE, A.CUSTNAME AS CLIENTE,
A.TECHID, B.NAME AS NOMBRE_TECNICO, A.ENTDTE AS ENTRADA, A.ARRIVDTE AS LLEGADA, A.COMPDTE AS FINALIZACION,
Case when A.SRVSTAT <> '80L' AND A.SRVSTAT <> '90F' THEN DateDiff(dd,A.ENTDTE,GETDATE()) else 0 end 'PERMANENCIA',

Case when A.SRVSTAT = '80L' OR A.SRVSTAT = '90F' THEN DateDiff(dd,A.ARRIVDTE,A.COMPDTE) else 0 end 'EFICIENCIA',

(SELECT TOP 1 D.PROBCDE AS ID_PROBLEMA FROM TBNRD.dbo.SVC00201 AS D WHERE D.CALLNBR = A.CALLNBR) AS 'ID_PROBLEMA'

FROM TBNRD.dbo.SVC00200 AS A
LEFT JOIN TBNRD.dbo.SVC00100 AS B ON B.TECHID = A.TECHID
LEFT JOIN TBNRD.dbo.SVC00913 AS C ON C.SRVSTAT = A.SRVSTAT
Order By A.CALLNBR

en donde el campo codigo del cual deseo presentar la descripcon es D.PROBCDE y la tabla donde esta la descricion a este se llama TABLAPROB y el campo para relacionarlo se llama TABLAPROB.PROBCDE.

Espero haberme explicado claramente y que puedan ayudarme. Gracias anticipadas.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Subconsulta con mas de una columna

Publicado por leonardo_josue (877 intervenciones) el 28/06/2012 20:29:31
Hola Erasmo, veamos si me quedó claro el problema... Creo que no hay necesidad de obtener el campo D.PROBCDE mediante una subconsulta, sino que lo puedes hacer mediante un INNER JOIN, es decir, en lugar de hacer esto:

1
2
3
4
(SELECT TOP 1 D.PROBCDE AS ID_PROBLEMA FROM TBNRD.dbo.SVC00201 AS D WHERE D.CALLNBR = A.CALLNBR) AS 'ID_PROBLEMA'
FROM TBNRD.dbo.SVC00200 AS A
LEFT JOIN TBNRD.dbo.SVC00100 AS B ON B.TECHID = A.TECHID
LEFT JOIN TBNRD.dbo.SVC00913 AS C ON C.SRVSTAT = A.SRVSTAT


Trata de hacerlo así:

1
2
3
4
5
D.PROBCDE AS ID_PROBLEMA 
FROM TBNRD.dbo.SVC00200 AS A
LEFT JOIN TBNRD.dbo.SVC00100 AS B ON B.TECHID = A.TECHID
LEFT JOIN TBNRD.dbo.SVC00913 AS C ON C.SRVSTAT = A.SRVSTAT
INNER JOIN TBNRD.dbo.SVC00201 AS D ON D.CALLNBR = A.CALLNBR


De esta manera tú podrías seguir agregando los INNER JOIN's hacia las tablas donde está la descipción,

1
2
3
4
5
6
7
..
D.PROBCDE AS ID_PROBLEMA,
E.DESCRIPCION,
..
INNER JOIN TBNRD.dbo.SVC00201 D ON D.CALLNBR = A.CALLNBR
INNER JOIN TABLAPROB.PROBCD E ON D.PROBCD = E.PROBCD
..


Haz la prueba y nos comentas. Si continuas con problema sería conveniente que nos pusieras algunos datos de ejemplo de tus tablas para ver alguna otra opción.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Subconsulta con mas de una columna

Publicado por Erasmo erasmorc@hotmail.com (15 intervenciones) el 28/06/2012 21:10:21
Hola Leonardo, gracias por tu pronta respuesta.

Realice los cambios pero no me funciona porque me esta trayendo registros duplicados, debido a que en una de la tablas hay mas de una ocurrencia para un mismo registro, por eso es que coloque en el select de la subconsulta el TOP 1. Como lo muestras podria funcionar si pudiera utilizar el DISTINCT pero solo para una columna especifica, es decir que no trajera los registros repetidos usando para comparar una columna especifica.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Subconsulta con mas de una columna

Publicado por leonardo_josue (877 intervenciones) el 28/06/2012 21:35:00
Hola de nuevo:

En el post pasado te pedía que si continuabas con problemas pusieras algunos datos de ejemplo para hacer pruebas... vuelvo a pedirte lo mismo. Por lo pronto podrías probar así:

1
2
3
4
5
6
7
D.PROBCDE AS ID_PROBLEMA
FROM TBNRD.dbo.SVC00200 AS A
LEFT JOIN TBNRD.dbo.SVC00100 AS B ON B.TECHID = A.TECHID
LEFT JOIN TBNRD.dbo.SVC00913 AS C ON C.SRVSTAT = A.SRVSTAT
INNER JOIN
(SELECT TOP 1 Dtemp.PROBCDE  FROM TBNRD.dbo.SVC00201 Dtemp WHERE
D.CALLNBR = A.CALLNBR ) D ON D.CALLNBR = A.CALLNBR



Aunque no estoy muy seguro de si funcionará... haz la prueba y nos comentas.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Subconsulta con mas de una columna

Publicado por Erasmo erasmorc@hotmail.com (15 intervenciones) el 28/06/2012 23:01:45
Hola a todos.

Que tipos de ejemplos necesitas no te interpreto lo que me pides.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Subconsulta con mas de una columna

Publicado por Erasmo erasmorc@hotmail.com (15 intervenciones) el 28/06/2012 23:33:07
Hola a todos.

Leonardo probe como me indicaste pero no me funciono.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Subconsulta con mas de una columna

Publicado por leonardo_josue (877 intervenciones) el 29/06/2012 16:09:51
Tercera vez que te pido... PON ALGUNOS DATOS DE EJEMPLO DE TUS TABLAS... de cualquier otra manera sólo estamos tratando de adivinar una consulta que te pueda servir pero en lo particular no visualizo cual es el problema... con tres registros de cada una de tus tablas es más que suficiente, pero si no haces lo que te pedimos es imposible tratar de ayudarte.

Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Subconsulta con mas de una columna

Publicado por leonardo_josue (877 intervenciones) el 29/06/2012 16:12:49
Algo como esto es lo que pido:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
mysql> SELECT * FROM tabla_1;
+------+-------------+-------------+---------------+
| cod1 | nomProyecto | fechaInicio | montoContrato |
+------+-------------+-------------+---------------+
|    1 | asfalto     | 2012-02-01  |        250000 |
|    2 | limpieza    | 2012-03-02  |         10000 |
|    3 | señales     | 2012-04-15  |         10000 |
+------+-------------+-------------+---------------+
3 rows in set (0.00 sec)
 
mysql> SELECT * FROM tabla_2;
+------+------+-----------------+-------------------+
| cod2 | cod1 | fechaConclusion | modificacionMonto |
+------+------+-----------------+-------------------+
|    4 |    1 | 2012-10-01      |            250000 |
|    5 |    2 | 2012-12-20      |             10000 |
|    6 |    2 | 2012-12-30      |              9500 |
|    7 |    3 | 2012-06-03      |             10000 |
+------+------+-----------------+-------------------+
4 rows in set (0.00 sec)


Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar