1到多个连接SQL视图,其中连接表可能有0条记录

时间:2014-03-31 15:57:55

标签: sql sql-server tsql join

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

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

    SalesOrderTable       OutsideSalesRepTable     SalesRepTable
    OrderID               BranchID                 SalesRepID
    CustID                CustID                   SalesRepName
    BranchID              SalesRepID

第一次加入需要在BranchID&上的SalesOrderTable和OutsideSalesRepTable之间进行。客户ID 第二个连接需要在SalesRepID

上的OutsideSalesRepTable和SalesRepTable之间

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

如果分支/客户只有3个OutsideSalesReps,那么OutsideSalesRep4-10应为null

这是我无法弄清楚的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

2 个答案:

答案 0 :(得分:1)

听起来您需要使用outer join(即:left joinright join)加入您的表格(以允许无结果的联接)并使用{{ 1}}从行创建列。

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

答案 1 :(得分:0)

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

SELECT * 从 (     SELECT so.OrderID,             so.OrderName,             sr.SalesRepName,             'SalesRep _'+ CAST(ROW_NUMBER()OVER(按名称分区ORDER BY SalesRepName)AS VARCHAR(30))rn     来自@SalesOrderTable所以     JOIN @OutsideSalesRepTable osp ON so.BranchID = osp.BranchID and so.CustID = osp.CustID     JOIN @SalesRepTable sr ON osp.SalesRepID = sr.SalesRepID

)src 枢 (
      MAX(SalesRepName)       FOR in(SalesRep_1,SalesRep_2,SalesRep_3,SalesRep_4,SalesRep_5,       SalesRep_6,SalesRep_7,SalesRep_8,SalesRep_9,SalesRep_10) )枢纽