SELECTs anidados
Es posible incluir varios SELECT en una misma consulta. Esta sintaxis permite escribir rápidamente una consulta sobre el resultado de otra consulta. Son consultas encadenadas.
Este consulta devuelve la media de las ventas anuales de cada producto.
select Product, ProductNumber, avg(Sales) AvgYearSalesselect Product.Name Product, Product.ProductNumber, year(OrderDate) OrderYear, sum(SalesOrderDetail.LineTotal) Salesfrom staging.SalesOrderDetailinner join staging.SalesOrderHeader using SalesOrderIdinner join staging.Product using ProductIdVer SQL compilado
SELECT Product, ProductNumber, avg(Sales) AS AvgYearSalesFROM ( SELECT Product.Name AS Product, Product.ProductNumber AS ProductNumber, year(OrderDate) AS OrderYear, sum(SalesOrderDetail.LineTotal) AS Sales FROM staging.SalesOrderDetail INNER JOIN staging.SalesOrderHeader ON (SalesOrderDetail.SalesOrderId=SalesOrderHeader.SalesOrderId) INNER JOIN staging.Product ON (SalesOrderDetail.ProductId=Product.ProductId) GROUP BY Product.Name, Product.ProductNumber, year(OrderDate) ) aGROUP BY Product, ProductNumberLa cláusulas SELECT encadenadas permiten, por ejemplo, contar el número de registros que devuelve una consulta previa. La siguiente consulta ejecuta un count(*) sobre el resultado de la consulta inferior.
SELECT count(*)SELECT Product.Name Product, Product.ProductNumber, sum(SalesOrderDetail.LineTotal) SalesFROM staging.SalesOrderDetailINNER JOIN staging.Product USING ProductIdVer SQL compilado
SELECT count(*) AS expr1FROM ( SELECT Product.Name AS Product, Product.ProductNumber AS ProductNumber, sum(SalesOrderDetail.LineTotal) AS Sales FROM staging.SalesOrderDetail INNER JOIN staging.Product ON (SalesOrderDetail.ProductId=Product.ProductId) GROUP BY Product.Name, Product.ProductNumber ) a