SQL Server - SubConsulta con mas de una referencia externa

 
Vista:

SubConsulta con mas de una referencia externa

Publicado por Hernan (1 intervención) el 24/01/2015 20:16:32
Que tal a todos!? Es mi primer mensaje y espero me puedan ayudar.
Tengo que resolver un ejercicio y no termino de entender que es lo que estoy haciendo mal.
Tengo una Tabla Canciones y una Tabla Compras. Las canciones tienen un precio pero las compras pueden ser por mas o menos del precio de la canción. El ejercicio pide obtener la diferencia de precio mas alta entre una compra en algún momento y el precio actual(dada por la columna precio en Canciones).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CREATE TABLE dbo.CANCIONES
(
id_cancion int  IDENTITY(1,1) primary key,
id_album int,
nombre varchar(50),
numero numeric(4),
duracion numeric(4,2),
genero varchar(50),
vivo varchar(4),
precio numeric(20,2)
)
 
CREATE TABLE dbo.COMPRAS
(
id_cancion int,
id_usuario int,
precio numeric(20,2),
fecha datetime
)

Obviamente id_cancion es fk a la tabla canciones

Lo que hice fue lo siguiente:

1
2
3
SELECT CA.NOMBRE,
		(SELECT MAX(ABS(CA.precio-CO.PRECIO)) FROM DBO.COMPRAS CO WHERE CO.ID_CANCION=CA.ID_CANCION) DIF
		FROM CANCIONES CA

El problema es que me arroja el siguiente error:

Se han especificado múltiples columnas en una expresión de agregado que contiene una referencia externa. Si una expresión agregada contiene una referencia externa, ésta deberá ser la única columna a la que se haga referencia en la expresión.

entonces me cuesta pensar en una alternativa...
Desde ya muchas gracias
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
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

SubConsulta con mas de una referencia externa

Publicado por Isaias (4558 intervenciones) el 26/01/2015 18:38:57
Inténtalo de esta forma

SELECT CA.NOMBRE,
(SELECT MAX(ABS(CA.precio-CO.PRECIO)) FROM DBO.COMPRAS CO JOIN CANCIONES CA ON CO.ID_CANCION=CA.ID_CANCION) DIF
FROM CANCIONES CA
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
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

SubConsulta con mas de una referencia externa

Publicado por Isaias (4558 intervenciones) el 26/01/2015 23:59:33
No se de donde salio el DIF, no lo tomes en cuenta

Ya me acorde, creo que ya lo trae tu consulta y es el nombre de la columna RESULTADO
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 3
Ha aumentado su posición en 15 puestos en SQL Server (en relación al último mes)
Gráfica de SQL Server

SubConsulta con mas de una referencia externa

Publicado por José (1 intervención) el 05/02/2019 00:11:38
Tu sugerencia creí que era correcta, pero el JOIN interno JOIN CANCIONES CA no enlaza con el WHERE CANCIONES CA.

Por un momento creí que funcionaba, pero no.

Muchas gracias de todas formas.

Un saludo.
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