Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 连接多个表中的多行_Sql Server_Sql Server 2008_Tsql_Coalesce - Fatal编程技术网

Sql server 连接多个表中的多行

Sql server 连接多个表中的多行,sql-server,sql-server-2008,tsql,coalesce,Sql Server,Sql Server 2008,Tsql,Coalesce,我已经阅读了这里的帖子,并且对Coalesce函数非常熟悉,但是我还没有弄清楚如何完成这个特定任务 所以,我有一个佣金表和一个类别表。我创建了一个示例,这样您就可以通过一些示例数据看到确切的数据结构。基本上,佣金表有SalesRepID、LocationID、CategoryID、SurgeonID和CommissionPercent列 ,通过传入SalesRepID、LocationID和SurgeonID,我可以得到类似的信息: .05 (Shirts), .05 (Shoes), .05

我已经阅读了这里的帖子,并且对Coalesce函数非常熟悉,但是我还没有弄清楚如何完成这个特定任务

所以,我有一个佣金表和一个类别表。我创建了一个示例,这样您就可以通过一些示例数据看到确切的数据结构。基本上,佣金表有SalesRepID、LocationID、CategoryID、SurgeonID和CommissionPercent列

,通过传入SalesRepID、LocationID和SurgeonID,我可以得到类似的信息:

.05 (Shirts), .05 (Shoes), .05 (Dresses), .10 (Hats), .15 (Pants)
然而,我正试图让它看起来像:

.05 (Shirts, Shoes, Dresses), .10 (Hats), .15 (Pants)
我确实试过几次,但是我从来没有得到我想要的结果

这让我想问,这在MsSQL 2008 R2中是否可行?如果是的话,我将非常感谢您对我所寻求的结果的任何帮助

非常感谢您的时间和精力


Andrew

我以前也遇到过类似的问题,唯一可以解决这个问题(不使用游标)的方法是创建一个CLR聚合函数。下面是C#(和VB)中的一个示例:

我相信它正是你所需要的:连接

结合您的示例和CLR,实现您想要的—SQL如下所示:

SELECT
  c.CommissionPercent
  , dbo.MyAgg(cat.Category)
FROM #tCommissions AS c
JOIN #tCategories AS cat ON c.CategoryID = cat.CategoryID
group by c.CommissionPercent

谢谢你的要点!比拔牙获取模式和数据要好得多。:-)如果你把它插入到gist查询中,你应该会看到你想要的结果(好吧,非常接近-见下文)

结果与您要求的略有不同,但您可以通过在拉取CommissionPercent时应用字符串格式来解决这一问题

Result
--------------------------------------------------------
0.05 (Shirts, Shoes, Dresses), 0.10 (Hats), 0.15 (Pants)

是的,我仍然发现CLR被两件事所阻碍:(a)头发尖尖的老板认为这是危险的,(b)部署代码的真正复杂性。不仅仅是最初,当你需要做出改变时,这可能会成为一个非常乏味的练习…@AaronBertrand我被这个谜题的答案弄得如此之快而震惊。我只需要一个小的调整就可以将其转换为一个函数(必须将逻辑移到where,请参见)。我得回家再仔细研究一下,看看到底发生了什么,但再次感谢您的及时回复。@AaronBertrand同意这一点!但是你不认为(假设你绕过(a)并想面对(b)),使用CLR函数是合适的方法吗?我的意思是,对于这样一个简单的需求,我发现查询有点复杂,而且不直观。我怀疑对于来自OO/.NET背景的人来说,查询看起来比CLR部署更复杂。对我来说,我在大约8分钟内完成了这个查询。如果我选择在CLR中部署DLL,我仍然会部署它。当我将代码移动到一个新的服务器时,它也是同样的复杂性(查询更具可移植性),正如我所说的,如果我必须对查询进行调整,则情况会更糟(就像我在本例中所做的那样,因为我错误地定位了where子句)。我不是说CLR不好,但我认为你对哪个更复杂/反直觉的看法是相当主观的。@AaronBertrand也同意这一点!是的,根据我在.NET的背景,我的观点可能有点主观,但也要记住,如果有人没有你那么熟练,需要调整这个查询,这可能会让人头疼!谢谢你的快速回复。虽然这不是我的解决方案,但我感谢你给我展示了一些新的东西。我甚至没有意识到这种可能性。
Result
--------------------------------------------------------
0.05 (Shirts, Shoes, Dresses), 0.10 (Hats), 0.15 (Pants)