【问题标题】:SQL statement with a master detailt, getting only 3 details带有主详细信息的 SQL 语句,仅获取 3 个详细信息
【发布时间】:2018-04-03 21:34:50
【问题描述】:

可以帮助我的 SQL 问题?我有一个主表叫products,另外一个叫prices(这里是一对多,取决于供应商的价格),也就是查询是这样的

SELECT 
    p.id_empresa, p.codigo, p.descripcion, p.piezas_comprar,
    IIF(o.Costo IS NULL, 0, o.Costo) AS Costo, 
    IIF(r.Nombre IS NULL, 'S/P', r.Nombre) AS Proveedor, 
    IIF(r.Calificacion IS NULL, 0, r.Calificacion) AS Calificacion 
FROM 
    vw_productos_compras p 
LEFT JOIN
    access_pyme.dbo.Productos_Proveedores o ON p.Codigo = o.Codigo 
                                            AND p.id_empresa = o.id_empresa 
LEFT JOIN 
    access_pyme.dbo.Proveedores r ON o.id_proveedor = r.id_poveedor

每个供应商我只需要三个记录,即从 Suppliers 表中,只需要按他们的产品表的成本排序的三个记录,别名或

3 条产品记录 1、3 条产品记录 2、3 条产品记录 3

00001 Supplier X $10
00001 Supplier Y $11
00001 Supplier Z $12
00002 Supplier X $8 
00002 Supplier Y $7 
00002 Supplier Z $9
00003 Supplier X $16
00003 Supplier Y $15
00003 Supplier Z $14

感谢您的宝贵时间

【问题讨论】:

  • 那么您现在的查询返回了什么,您希望它看起来像什么?我看到你在那里包含了一个结果,但不清楚它是从什么得出的,或者那是你的起点还是期望的终点。

标签: sql-server master-detail


【解决方案1】:

我有答案,使用 Outer Apply:

SELECT p.id_empresa, p.codigo, p.descripcion, p.piezas_comprar,
iif(o.Costo IS NULL, 0, o.Costo) AS Costo, iif(r.Nombre IS NULL,
'S/P', r.Nombre) AS Proveedor, iif(r.Calificacion IS NULL, 0,
r.Calificacion) AS Calificacion 
FROM            vw_productos_compras p

/*LEFT JOIN access_pyme.dbo.Productos_Proveedores o ON p.Codigo =
o.Codigo AND p.id_empresa = o.id_empresa */ 

OUTER APPLY  (   
  SELECT
 top 3 id_proveedor, Costo   
 FROM access_pyme.dbo.Productos_Proveedores o   
 WHERE p.Codigo = o.Codigo AND p.id_empresa = o.id_empresa ) o 

LEFT JOIN access_pyme.dbo.Proveedores r ON o.id_proveedor = r.id_poveedor

【讨论】:

    猜你喜欢
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    相关资源
    最近更新 更多