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

[SOLUCIONADO] Que significa este error?

Estas en el tema de Que significa este error? en el foro de SQL Server en Foros del Web. Sólo se puede especificar una expresión en la lista de selección cuando la subconsulta no se especifica con EXISTS. La cuestión es esta. Estoy trabajando ...
  #1 (permalink)  
Antiguo 23/11/2013, 22:56
 
Fecha de Ingreso: julio-2010
Mensajes: 191
Antigüedad: 14 años, 4 meses
Puntos: 2
Que significa este error?

Sólo se puede especificar una expresión en la lista de selección cuando la subconsulta no se especifica con EXISTS.


La cuestión es esta.
Estoy trabajando con la Base de datos de Northwind

y necesito encontrar los nombres de los clientes que devuelve esta consulta

Código SQL:
Ver original
  1. SELECT ShipCountry,MAX(ShippedDate)
  2.     FROM Orders O
  3.     GROUP BY ShipCountry
  4.     ORDER BY ShipCountry

traté de hacer esto

Código SQL:
Ver original
  1. SELECT
  2.  
  3.     CompanyName,
  4.     (SELECT ShipCountry,MAX(ShippedDate)
  5.     FROM Orders O  
  6.     WHERE O.CustomerID=C.CustomerID
  7.     GROUP BY ShipCountry
  8.     )
  9. FROM Customers C

Pero me tira un error
"Sólo se puede especificar una expresión en la lista de selección cuando la subconsulta no se especifica con EXISTS."

Que puedo hacer?
gracias
  #2 (permalink)  
Antiguo 24/11/2013, 04:38
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 12 años, 4 meses
Puntos: 40
Respuesta: Que significa este error?

Sub consultas en el Select pueden tener solamente una columna (en la tuya hay dos),
y devolver una fila por cada fila de la consulta principal (si el Group By es por ShipCountry y no por CustomerID - puede haber más que una!).

Probá esta consulta:
Código SQL:
Ver original
  1. SELECT  C.CompanyName,
  2.         O.ShipCountry,
  3.         O.ShippedDate
  4. FROM Customers C
  5. LEFT JOIN (SELECT ShipCountry,
  6.                 MAX(ShippedDate) ShippedDate
  7.         FROM    Orders O  
  8.         GROUP BY ShipCountry) O
  9.         ON O.CustomerID=C.CustomerID;
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #3 (permalink)  
Antiguo 25/11/2013, 11:00
 
Fecha de Ingreso: julio-2010
Mensajes: 191
Antigüedad: 14 años, 4 meses
Puntos: 2
Respuesta: Que significa este error?

No me funciona, no está haciendo la union (el left join).

No puedo hacer esta unión

ON O.CustomerID=C.CustomerID

porque ese no es un campo que está dentro del select.

cierto?
  #4 (permalink)  
Antiguo 25/11/2013, 11:07
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Que significa este error?

Cita:
Iniciado por l222p Ver Mensaje
No me funciona, no está haciendo la union (el left join).

No puedo hacer esta unión

ON O.CustomerID=C.CustomerID

porque ese no es un campo que está dentro del select.

cierto?
Falso, se esta usando un alias por lo que puedes usar el nombre del campo dentro de un left join.....
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 25/11/2013, 11:20
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 12 años, 4 meses
Puntos: 40
Respuesta: Que significa este error?

Tienes razon: me equivoque..
Espero que esto es correcto:
Código SQL:
Ver original
  1. SELECT  C.CompanyName,
  2.         O.ShipCountry,
  3.         O.ShippedDate
  4. FROM Customers C
  5. OUTER Apply (SELECT ShipCountry,
  6.                 MAX(ShippedDate) ShippedDate
  7.         FROM    Orders O
  8.         WHERE O.CustomerID=C.CustomerID
  9.         GROUP BY ShipCountry) O;
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #6 (permalink)  
Antiguo 25/11/2013, 11:21
 
Fecha de Ingreso: julio-2010
Mensajes: 191
Antigüedad: 14 años, 4 meses
Puntos: 2
Respuesta: Que significa este error?

Pero no me funciona, me dice que el campo O.CustomerID no es válido, y creo que es porque no está dentro de la subconsulta.

Probé colocarlo dentro de la subconsulta, hace la unión, pero no me tira el resultado que quiero.


Éste es el query que quiero hacer.


Ayuda porfavor, llevo horas tratando de hacerlo y no puedo
  #7 (permalink)  
Antiguo 25/11/2013, 11:27
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Que significa este error?

tanto para esto:

Código SQL:
Ver original
  1. SELECT CompanyName,t2.customerid,t2.max_fecha FROM Customers AS t1
  2. LEFT JOIN
  3. (
  4. SELECT customerid,MAX(ShippedDate) max_fecha
  5. FROM orders
  6.     GROUP BY customerid) AS t2 ON (t1.customerid=t2.customerid)

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #8 (permalink)  
Antiguo 25/11/2013, 11:28
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 12 años, 4 meses
Puntos: 40
Respuesta: Que significa este error?

La comparacion O.CustomerID=C.CustomerID aparecio en tu primer mensaje..
Por favor escribe cuales son las columnas de Orders,
cuales son las columnas de Customers
y que exactamente quieres obtener.
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #9 (permalink)  
Antiguo 25/11/2013, 11:29
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Que significa este error?

Cita:
Pero no me funciona, me dice que el campo O.CustomerID no es válido, y creo que es porque no está dentro de la subconsulta.
Cuando algo no te funcione según se te sugiere, postea la consulta que creaste tal y como la has usado. No nos sirve que nos digas que "no me funciona"; habitualmente no funciona porque lo escriben mal.

Postea lo que escribiste y veremos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 25/11/2013, 11:30
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Que significa este error?

Gracias que tengo la base de datos norhwind pude entender que quiere si no........
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #11 (permalink)  
Antiguo 25/11/2013, 11:35
 
Fecha de Ingreso: julio-2010
Mensajes: 191
Antigüedad: 14 años, 4 meses
Puntos: 2
Respuesta: Que significa este error?

ok, lo que quiero es lo siguiente:

los registro que devuelve esta consulta.

Código SQL:
Ver original
  1. SELECT ShipCountry,MAX(ShippedDate)
  2.     FROM Orders O
  3.     GROUP BY ShipCountry
  4.     ORDER BY ShipCountry

son estos:




Pero a cada uno de esos registros pertenecen a un cliente (CompanyName), necesito saber cual es ese cliente.

Los clientes estan en otra tabla (Customers).

Pero también necesito saber cual es la # de orden de cada registro (está ahi mismo en la tabla orders)
  #12 (permalink)  
Antiguo 25/11/2013, 11:42
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Que significa este error?

Código SQL:
Ver original
  1. SELECT CompanyName,t2.customerid,t2.max_fecha,orderid FROM Customers AS t1
  2. LEFT JOIN
  3. (
  4. SELECT customerid,MAX(ShippedDate) max_fecha,orderid
  5. FROM orders
  6.     GROUP BY customerid,orderid) AS t2 ON (t1.customerid=t2.customerid)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #13 (permalink)  
Antiguo 25/11/2013, 11:57
 
Fecha de Ingreso: julio-2010
Mensajes: 191
Antigüedad: 14 años, 4 meses
Puntos: 2
Respuesta: Que significa este error?

ese query me devuelve esto


y me da cada fecha de cada orden, y no es eso lo que necesito.

si no esto:
DE CADA PAIS cual es la ultima orden (orderid), donde es enviada (SHIPCOUNTRY)

solo deben salir como 25 0 21 registros, pues solo existe esa cantidad de paises.

no necesito todas las ordenes.

SOLO LA ULTIMA ORDEN DE CADA PAIS.

Espero me entiendan, soy nuevo en esto.

Y agradezco mucho su ayuda, de verdad gracias
  #14 (permalink)  
Antiguo 25/11/2013, 11:58
 
Fecha de Ingreso: julio-2010
Mensajes: 191
Antigüedad: 14 años, 4 meses
Puntos: 2
Respuesta: Que significa este error?

si haces este query

Código SQL:
Ver original
  1. SELECT DISTINCT ShipCountry FROM Orders

verás la cantidad de paises que hay, y necesito saber cual es la ultima orden de cada uno de esos paises.
  #15 (permalink)  
Antiguo 25/11/2013, 12:07
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Que significa este error?

tu planteamiento desde un inicio estaba mal, porque shippeddate? que no era mas facil un max(orderid)??

Código SQL:
Ver original
  1. SELECT CompanyName,t1.customerid,t2.orderdate,orderid FROM Customers AS t1
  2. LEFT JOIN
  3. (
  4. SELECT customerid,orderdate,orderid
  5. FROM orders WHERE orderid IN (
  6. SELECT MAX(orderid) FROM orders GROUP BY shipcountry)    
  7.     ) AS t2 ON (t1.customerid=t2.customerid)
  8. WHERE t2.OrderID IS NOT NULL

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #16 (permalink)  
Antiguo 25/11/2013, 13:10
 
Fecha de Ingreso: julio-2010
Mensajes: 191
Antigüedad: 14 años, 4 meses
Puntos: 2
Respuesta: Que significa este error?

y si solo quiero mostrar ORDERID, COMPANYNAME, SHIPCOUNTRY, SHIPPED DATE ???
  #17 (permalink)  
Antiguo 25/11/2013, 13:23
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Que significa este error?

solo modificas los campos a mostrar:

Código SQL:
Ver original
  1. SELECT orderid,CompanyName,ShipCountry,ShippedDate FROM Customers AS t1
  2. LEFT JOIN
  3. (
  4. SELECT customerid,ShippedDate,orderid,ShipCountry
  5. FROM orders WHERE orderid IN (
  6. SELECT MAX(orderid) FROM orders GROUP BY shipcountry)    
  7.     ) AS t2 ON (t1.customerid=t2.customerid)
  8. WHERE t2.OrderID IS NOT NULL

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #18 (permalink)  
Antiguo 25/11/2013, 13:40
 
Fecha de Ingreso: julio-2010
Mensajes: 191
Antigüedad: 14 años, 4 meses
Puntos: 2
Respuesta: Que significa este error?

La verdad que agradezco mucho tu tiempo, pero todavía falta un poco para que de los resultados que yo quiero.

Modificando la consulta que me proporcionaste.

Código SQL:
Ver original
  1. SELECT t2.orderid,CompanyName,t2.ShipCountry ,t2.ShippedDate FROM Customers AS t1
  2. JOIN
  3.  
  4. (SELECT customerid,ShippedDate,orderid,ShipCountry FROM orders
  5. WHERE ShippedDate IN (SELECT MAX(ShippedDate) FROM orders GROUP BY shipcountry))
  6.  AS t2 ON (t1.customerid=t2.customerid)
  7. WHERE t2.OrderID IS NOT NULL
  8. ORDER BY t2.ShipCountry

y me tira algunos registros correctos, y ¿porqué digo esto?, porque estamos comparando fechas.

Eso quiere decir que por ejemplo las fechas ultimas de cada pais son estas.

Código SQL:
Ver original
  1. SELECT MAX(ShippedDate) FROM orders GROUP BY shipcountry

pero esas fechas devueltas pueden ser igual que varios paises, por ejemplo, la fecha mas alta de Austria es 1998-04-29, pero esta misma fecha puede estar en otro pais (y es muy probable que no sea la mas alta) entonces devuelve austria con esa fecha maxima, y devuelve tambien el otro país "X" con la misma fecha de austria.
Me explico?
  #19 (permalink)  
Antiguo 25/11/2013, 14:27
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Que significa este error?

a ver ya te diste cuenta que se repiten las fechas, ahora se necesitaria otro campo para igualar los datos, por eso use el orderid, podrias poner el enunciado de tu requerimiento???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #20 (permalink)  
Antiguo 25/11/2013, 15:28
 
Fecha de Ingreso: julio-2010
Mensajes: 191
Antigüedad: 14 años, 4 meses
Puntos: 2
Respuesta: Que significa este error?

ya lo puse

Desarrolle una consulta que muestre la información de las últimas
órdenes de compra enviadas por cada país.

  #21 (permalink)  
Antiguo 25/11/2013, 15:40
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Que significa este error?

sera esta:

Código SQL:
Ver original
  1. SELECT orderid,CompanyName,ShipCountry,ShippedDate FROM Customers AS t1
  2. LEFT JOIN
  3. (
  4. SELECT customerid,ShippedDate,orderid,ShipCountry
  5. FROM orders WHERE CONVERT(VARCHAR(20),ShippedDate) + CONVERT(VARCHAR(20),ShipCountry) IN (
  6. SELECT CONVERT(VARCHAR(20),MAX(ShippedDate)) + CONVERT(VARCHAR(20),ShipCountry) FROM orders  GROUP BY ShipCountry
  7.     )) AS t2 ON (t1.customerid=t2.customerid)
  8. WHERE t2.OrderID IS NOT NULL

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #22 (permalink)  
Antiguo 25/11/2013, 15:51
 
Fecha de Ingreso: julio-2010
Mensajes: 191
Antigüedad: 14 años, 4 meses
Puntos: 2
Respuesta: Que significa este error?

WOW! MILLONES DE GRACIAS!

nunca, jamás se me hubiera ocurrido eso.

Mil gracias de verdad , agradezco tu tiempo
  #23 (permalink)  
Antiguo 25/11/2013, 15:58
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Que significa este error?

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

Etiquetas: 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:15.