【发布时间】:2017-11-18 05:39:11
【问题描述】:
我看到很多类似的问题,但几乎所有问题都以列名的形式分组结果(基于结果的列名),我的是一个更简单的列表。我不在乎它是否使用动态 SQL(我认为它必须这样做)。
请不要告诉我我需要重组表格,我使用的是旧系统并且没有该选项。
基本上,我只需要连续匹配表“A”中的给定记录的所有有效表“B”条目的列表。
我还没有任何代码示例,因为我没有找到正确设置它的方法。
表:客户 c 客户 ID 名称 1 比尔·史密斯 2 吉姆·琼斯 3 玛丽·亚当斯 4 温迪·威廉姆斯 表:债务 d CustID 债权人余额 1 ABC 贷款 245 1 花旗银行 815 2 女高音金融 74000 3 花旗银行 24 3 女高音金融 93000 3 富国银行 275 3 中西部 S&L 2500 4 ABC贷款1500 4 弗雷德的发薪日贷款 1000 期望的输出: 名称 Cred1 Bal1 Cred2 Bal2 Cred3 Bal3 Cred4 Bal4 比尔史密斯 ABC 贷款 245 花旗银行 815 (NULL) (NULL) (NULL) (NULL) Jim Jones Soprano Financial 74000 (NULL) (NULL) (NULL) (NULL) (NULL) (NULL) Mary Adams 花旗银行 24 Soprano Finanacial 93000 Wells Fargo 275 Midwestern S&L 2500 Wendy Williams ABC Loans 1500 Fred's Payday Loan 1000 (NULL) (NULL) (NULL) (NULL)基本上,我可能必须为任何特定的“CustomerID”收集某种最多记录数,并基于此定义输出列。如果这个问题已经得到解答,请随意链接并关闭它,我在搜索时没有看到这个特定场景。
【问题讨论】:
-
这是另一种动态方法。 sqlservercentral.com/articles/Crosstab/65048
-
@TabAlleman - 不,不是重复的,因为它收集与某个条目匹配的值,并且列名是从中派生的,我确实看到了,但不太合适,因为我不想每个“债权人”名称的列。
-
这个概念可以适应您的需要。根据任意顺序,您将使用与您的客户相关的债权人 row_number() 而不是债权人名称。以下两个答案都只是将副本中的答案扩展为更适合您的情况,但一般概念是相同的。
-
"adaptable" - 但是我不得不问一个关于适应行号的方法的问题,这本质上就是这样,所以仍然不是重复的,IMO。我专门研究了这些解决方案的问题,需要提出这个问题,这里的答案非常清楚地概述了我需要做什么。一个适应性强的答案更多地属于“相似”,而不是“重复”。
标签: sql sql-server tsql pivot crosstab