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

Consulta sobre AdventureWorks

Estas en el tema de Consulta sobre AdventureWorks en el foro de SQL Server en Foros del Web. Estuve practicando un poco sobre la base de datos de ejemplo que propone Sql Server. En esta base de datos se tiene una tabla SalesOrderHeader ...
  #1 (permalink)  
Antiguo 09/11/2014, 00:13
 
Fecha de Ingreso: noviembre-2006
Mensajes: 166
Antigüedad: 17 años, 5 meses
Puntos: 6
Pregunta Consulta sobre AdventureWorks

Estuve practicando un poco sobre la base de datos de ejemplo que propone Sql Server.

En esta base de datos se tiene una tabla SalesOrderHeader que guarda información sobre una venta realizada. Además existe una tabla llamada SalesOrderDetail que almacena datos sobre un producto que es vendido, es decir forma parte del detalle, proporcionando datos como la cantidad vendida y el precio unitario.

Una primera consulta que hice fue:
Código SQL:
Ver original
  1. SELECT
  2. H.SalesOrderID AS 'N° Orden',
  3. H.OrderDate AS Fecha,
  4. SUM(D.OrderQty*D.UnitPrice) AS [Importe Vendido]
  5. FROM Sales.SalesOrderHeader H
  6. INNER JOIN Sales.SalesOrderDetail D
  7. ON H.SalesOrderID = D.SalesOrderID
  8. GROUP BY H.SalesOrderID, H.OrderDate
Funciona perfectamente y devuelve el importe vendido para cada orden, por ello es que se agrupa en base al SalesOrderID, presente en cada Detail.

Luego decidí incluir información de quien realiza la compra y el vendedor que se encarga de efectuarla. No debería haber problema dado que por cada SalesOrderID hay solo 1 CustomerID y SalesPersonID, por estar en la misma tabla.
Código SQL:
Ver original
  1. SELECT
  2. H.SalesOrderID AS 'N° Orden',
  3. H.OrderDate AS Fecha,
  4. H.CustomerID AS Cliente,
  5. H.SalesPersonID AS Vendedor,
  6. SUM(D.OrderQty*D.UnitPrice) AS [Importe Vendido]
  7. FROM Sales.SalesOrderHeader H
  8. INNER JOIN Sales.SalesOrderDetail D
  9. ON H.SalesOrderID = D.SalesOrderID
  10. GROUP BY H.SalesOrderID, H.OrderDate, H.CustomerID, H.SalesPersonID
Esto funciona muy bien, pero muestra el ID del cliente y de quien realiza la venta, y entonces decidí agregar más INNER JOIN para capturar información de ambos de sus tablas respectivas.

Entonces he escrito:
Código SQL:
Ver original
  1. SELECT
  2. H.SalesOrderID AS 'N° Orden',
  3. H.OrderDate AS Fecha,
  4. SUM(D.OrderQty*D.UnitPrice) AS [Importe Vendido],
  5. V.FirstName+' '+V.MiddleName+' '+V.LastName AS Vendedor,
  6. C.FirstName+' '+C.MiddleName+' '+C.LastName AS Cliente
  7. FROM Sales.SalesOrderHeader H
  8.  
  9. INNER JOIN Sales.SalesOrderDetail D
  10. ON H.SalesOrderID = D.SalesOrderID
  11.  
  12. INNER JOIN Person.Person V
  13. ON H.SalesPersonID = V.BusinessEntityID
  14.  
  15. INNER JOIN Person.Person C
  16. ON H.CustomerID = C.BusinessEntityID
  17.  
  18. GROUP BY H.SalesOrderID, H.OrderDate, V.FirstName+' '+V.MiddleName+' '+V.LastName, C.FirstName+' '+C.MiddleName+' '+C.LastName
Y aunque no me da error, me aparecen 0 resultados.
La única diferencia que la consulta previa es que debería mostrar nombres.
De hecho hice la consulta previa para asegurar de que habían resultados.
Es lógico que deben haber resultados porque CustomerID y SalesPersonID son de la misma tabla a la que pertenece el SalesOrderID (y por tanto están a un mismo nivel)

Los 2 últimos valores del GROUP BY los he puesto porque de caso contrario da error, lo mismo con H.OrderDate, pues a mi parecer debería bastar con "GROUP BY H.SalesOrderID", que es lo que determina al grupo (los demás están a un mismo nivel y sería como redundar).

¿Alguien conoce esta base de datos?
De ser así, estaría agradecido con recibir un poco de ayuda jeje.

Gracias de antemano.
  #2 (permalink)  
Antiguo 10/11/2014, 09:44
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Consulta sobre AdventureWorks

prueba con left join en lugar de inner join y compara resultados
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: select, server, sql, tabla
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 19:56.