我的任务是创建一个需要从另一个表中引入最多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
答案 0 :(得分:1)
听起来您需要使用outer join
(即:left join
或right 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)
)枢纽