Consulta en una base de datos SQL Server para obtener nombre y teléfono de proveedores
Hola ... A ver si me puedes ayudar con esta consulta que tengo que hacer en sql server Hallar el nombre y el teléfono de todos los proveedores que nos venden dos o más productos. Las tablas son: Proveedores (cod_prv,nm_prv,tf_prv) Productos (Cod_prd,Cod_prv,pre_uni,des_prd) Linea_Pedidos (Cod_ped,Cod_prd,Cantidad) Clientes (Cod_Cli,Nm_cli,ciu_cli,dir_cli,tf_cli)
Pedidos (Cod_ped,fecha,Cod_cli)
1 Respuesta
Respuesta de denciso
0
0
denciso, Soy una persona multifacética, tanto manejo la informática,...
Utiliza el siguiente segmento de la ayuda en línea de sql server para modelo y armar la sentencia que deseas: Elegir filas con la cláusula HAVING La cláusula HAVING establece las condiciones de la cláusula GROUP BY de la misma forma que WHERE interactúa con SELECT. Mientras que las condiciones de búsqueda de WHERE se aplican antes de que se produzca la operación de agrupamiento, las condiciones de búsqueda de HAVING se aplican después. La sintaxis de la cláusula HAVING es similar a la de la cláusula WHERE, con la diferencia de que HAVING puede contener funciones de agregado. Las cláusulas HAVING pueden hacer referencia a cualquiera de los elementos que aparecen en la lista de selección. En esta consulta se buscan publicadores cuyas ventas anuales hasta la fecha hayan sido superiores a 40.000 dólares. USE pubs SELECT pub_id, total = SUM(ytd_sales) FROM titles GROUP BY pub_id HAVING SUM(ytd_sales) > 40000 El siguiente es el conjunto de resultados: pub_id total ------ ----------- 0877 44219 (1 row(s) affected) Para asegurarse de que hay como mínimo seis libros involucrados en los cálculos para cada publicador, este ejemplo utiliza HAVING COUNT(*) > 5 para eliminar los publicadores que devuelven totales con menos de seis libros. USE pubs SELECT pub_id, total = SUM(ytd_sales) FROM titles GROUP BY pub_id HAVING COUNT(*) > 5 El siguiente es el conjunto de resultados: pub_id total ------ ----------- 0877 44219 1389 24941 (2 row(s) affected) La comprensión de la secuencia correcta en la que se aplican las cláusulas WHERE, GROUP BY y HAVING ayuda a codificar consultas que sean eficientes: La cláusula WHERE se utiliza para filtrar las filas que resultan de las operaciones especificadas en la cláusula FROM. La cláusula GROUP BY se usa para agrupar el resultado de la cláusula WHERE. La cláusula HAVING se usa para filtrar las filas del resultado agrupado. Es más eficiente especificar en la cláusula WHERE las condiciones de búsqueda que se pueden establecer antes o después de la operación de agrupamiento. Esto reduce el número de filas que tienen que agruparse. Las únicas condiciones de búsqueda que se deben especificar en la cláusula HAVING son aquellas que se deben aplicar una vez que se hayan realizado las operaciones de agrupamiento. ¿El optimizador de consultas de Microsoft® SQL Server? 2000 puede tratar la mayor parte de estas condiciones. Si el optimizador determina que una condición de búsqueda HAVING se puede aplicar antes de la operación de agrupamiento, lo hará. Puede que el optimizador no reconozca todas las condiciones de búsqueda de HAVING que se pueden aplicar antes de la operación de agrupamiento. Se recomienda colocar todas estas condiciones de búsqueda en la cláusula WHERE en lugar de en la cláusula HAVING. En la consulta siguiente se muestra la cláusula HAVING con una función de agregado. Agrupa por tipos las filas de la tabla titles y elimina los grupos que incluyen solamente un libro: USE pubs SELECT type FROM titles GROUP BY type HAVING COUNT(*) > 1 El siguiente es el conjunto de resultados: type ------------------ business mod_cook popular_comp psychology trad_cook (5 row(s) affected) A continuación se muestra un ejemplo de una cláusula HAVING sin funciones de agregado. Agrupa por tipos las filas de la tabla titles y elimina los tipos que no empiezan por la letra "p". USE pubs SELECT type FROM titles GROUP BY type HAVING type LIKE 'p%' El siguiente es el conjunto de resultados: type ------------------ popular_comp Psychology (2 row(s) affected) Cuando en HAVING se incluyen varias condiciones, se combinan mediante AND, OR o NOT. En el ejemplo siguiente se muestra cómo agrupar titles por publicadores, incluyendo sólo aquellos cuyo número de identificación sea superior a 0800, hayan pagado más de 15.000 dólares en adelantos totales y vendan libros por un promedio de menos de 20 dólares. SELECT pub_id, SUM(advance) AS AmountAdvanced, AVG(price) AS AveragePrice FROM pubs.dbo.titles WHERE pub_id > '0800' GROUP BY pub_id HAVING SUM(advance) > $15000 AND AVG(price) < $20 ORDER BY se puede usar para ordenar el resultado de una cláusula GROUP BY. En este ejemplo se muestra la utilización de la cláusula ORDER BY para definir el orden en el que se devuelven las filas de una cláusula GROUP BY: SELECT pub_id, SUM(advance) AS AmountAdvanced, AVG(price) AS AveragePrice FROM pubs.dbo.titles WHERE pub_id > '0800' AND price >= $5 GROUP BY pub_id HAVING SUM(advance) > $15000 AND AVG(price) < $20 ORDER BY pub_id DESC Véase también SELECT Tienes que usar un having count(micliente) > 2