【问题标题】:1 to Many join for SQL View where joined table may have 0 recordsSQL 视图的 1 到多连接,其中连接的表可能有 0 条记录
【发布时间】:2014-03-31 15:57:55
【问题描述】:

我的任务是创建一个需要从另一个表中引入多达 10 条记录的视图。问题是该表可能有 0、5、10 条或更多对应的记录。

这是非常简化的设计,仅包含相关内容

    SalesOrderTable       OutsideSalesRepTable     SalesRepTable
    OrderID               BranchID                 SalesRepID
    CustID                CustID                   SalesRepName
    BranchID              SalesRepID

第一个连接需要在 BranchID 和 CustID 上的 SalesOrderTable 和 OutsideSalesRepTable 之间 第二个联接需要在 SalesRepID 上的 OutsideSalesRepTable 和 SalesRepTable 之间

视图需要将列列为OutsideSalesRep1、OutsideSalesRep2、...OutsideSalesRep10,并用SalesRepName 填充。我无法控制这个数据库的设计。我宁愿在客户表中看到 10 个专用于 SalesRepID 的字段,并且只使用左连接。

如果只有 3 个OutsideSalesReps 存在于分支机构/客户,那么OutsideSalesRep4-10 应该为空

这是 165 列/35+ 表视图中我无法弄清楚的唯一部分。

任何帮助将不胜感激。

PS 我对 TSQL 还很陌生。才用了6个月左右。

编辑:我链接到显示源数据样本的图像,以帮助(我希望)解释我在寻找什么。 数据透视表需要显示

    SONum OutsideRep1 OutsideRep2 OutsideRep3 ..... Outside Rep10
    5819  59          69          70          null  null     
    5821  59          70          null        null  null

http://www.bayernsupport.com/SQL.png

【问题讨论】:

  • 您需要pivot query,因为您试图将salesrep 表中的单个列转换为查询结果中的多个列。
  • 所以我已经尝试了几种不同的方法,这可能是我的无知,但我无法以我需要的方式查询 Pivot。如果我在 Pivot 的“IN”子句中指定了 SalesRepName 或 ID,我可以将它发送到 Pivot,但我不知道这些值是什么。

标签: sql sql-server tsql join


【解决方案1】:

听起来您需要使用outer join(即:left joinright join)连接表(以允许在没有结果的情况下进行连接)并使用pivot 从行创建列.

http://technet.microsoft.com/en-us/library/ms177410(v=sql.105).aspx

【讨论】:

    【解决方案2】:

    在朋友的帮助下成功了。它确实需要一个支点,但它还需要一个有趣的查询作为源,请记住下面的字段名称不完全匹配,但结构和最终结果已经确定。

    选择 * 从 ( 选择so.OrderID, 所以.OrderName, sr.SalesRepName, 'SalesRep_'+CAST(ROW_NUMBER() OVER(PARTITION BY OrderName ORDER BY SalesRepName) AS VARCHAR(30)) rn FROM @SalesOrderTable 所以 在 so.BranchID = osp.BranchID 和 so.CustID=osp.CustID 上加入 @OutsideSalesRepTable osp 加入 @SalesRepTable sr ON osp.SalesRepID = sr.SalesRepID

    ) 源 枢 (
    MAX(销售代表姓名) FOR rn in (SalesRep_1, SalesRep_2, SalesRep_3,SalesRep_4, SalesRep_5, SalesRep_6,SalesRep_7,SalesRep_8,SalesRep_9,SalesRep_10) ) piv

    【讨论】:

      猜你喜欢
      • 2021-05-29
      • 2010-10-11
      • 1970-01-01
      • 2023-04-04
      • 2013-08-17
      • 1970-01-01
      • 2017-11-01
      • 2023-03-12
      • 2023-01-12
      相关资源
      最近更新 更多