2014-03-31 38 views
0

我一直负责创建需要从另一个表中引入多达10条记录的视图。问题是这个表可能有0,5,10或更多的相应记录。1到许多SQL连接查看连接表可能有0条记录

这里是很简单的设计,只包括什么是相关

SalesOrderTable  OutsideSalesRepTable  SalesRepTable 
    OrderID    BranchID     SalesRepID 
    CustID    CustID     SalesRepName 
    BranchID    SalesRepID 

第一个连接需要在BranchID & SalesOrderTable和OutsideSalesRepTable之间的CustID 第二加入需要是OutsideSalesRepTable和SalesRepTable之间的SalesRepID

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

如果只有3 OutsideSalesReps exsit为分公司/客户比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

+0

你需要一个[支点查询](HTTP://的TechNet 。microsoft.com/en-us/library/ms177410%28v=sql.105%29.aspx),因为您试图将salesrep表中的单个列转换为查询结果中的多个列。 –

+0

所以我尝试了这种方法几种不同的方式,这可能是我的无知,但我不能以我需要的方式得到一个查询枢轴。 我可以得到它枢轴如果我指定SalesRepName或ID在枢轴的“IN”子句中,但我不会知道这些值是什么。 –

回答

0

得到它与一个朋友的援助工作。它确实需要一个数据透视表,但它也需要一个有趣的查询作为数据源,请记住下面的字段名称并不完全匹配,但结构和最终结果已死亡。

SELECT * FROM ( SELECT so.OrderID, so.OrderName, sr.SalesRepName, 'SalesRep的_' + CAST(ROW_NUMBER()OVER(PARTITION BY ORDERNAME ORDER BY SalesRepName)AS VARCHAR(30) )RN FROM @SalesOrderTable所以 JOIN @OutsideSalesRepTable OSP ON so.BranchID = osp.BranchID和so.CustID = osp.CustID JOIN @SalesRepTable SR ON osp.SalesRepID = sr.SalesRepID

)SRC PIVOT (
MAX(SalesRepName) 的RN用在(SalesRep_1,SalesRep_2,SalesRep_3,SalesRep_4,SalesRep_5, SalesRep_6,SalesRep_7,SalesRep_8,SalesRep_9,SalesRep_10) )PIV