我正在尝试确定在SSIS或直接TSQL中根据给定键合并两行的最佳方法,但是根据各种聚合规则(具体为MAX和SUM)从每行中获取特定数据。例如,给定以下数据集:
Customer Name Total Date Outstanding
12345 A 100 7/15/2015 500
12345 200 1/1/2015 300
456 B 500 1/2/2010 100
456 B 250 2/1/2015 900
78 C 100 9/15/2015 500
我希望将每个客户密钥合并为一行,并以下列规则为例:
结果集将是:
Customer Name Total Date Outstanding
12345 A 200 7/15/2015 800
456 B 500 2/1/2015 1000
78 C 100 9/15/2015 500
这里最好的方法是什么?我的第一直觉是查询表以在客户上连接到自己以获取单行上的所有值,然后在SSIS中的派生列任务中使用公式来确定要使用的值。我担心的是不可扩展 - 如果我的客户在主数据集中只出现两次,它的工作正常,但目标是逻辑工作N行,而不需要做大量的返工。我确信还有一种我在这里缺少的TSQL方法。任何帮助将不胜感激。
答案 0 :(得分:1)
如果查询中的name列不为空,那么只需在一个查询中使用聚合函数
即可 DECLARE @Customer TABLE
(
Customer INT, Name varchar(10), Total INT , PurchaseDate DATE , Outstanding INT
)
INSERT INTO @Customer
SELECT 12345,'A',100,'7/15/2015',500 UNION
SELECT 12345,'A',200,'1/1/2015',300 UNION
SELECT 456,'B',500,'1/2/2010',100 UNION
SELECT 456,'B',250,'2/1/2015',900 UNION
SELECT 78,'C',100,'9/15/2015',500
SELECT Customer,NAME ,MAX(Total), MAX(PurchaseDate), SUM(outstanding)
FROM @Customer
GROUP BY Customer, NAME
现在,如果您的名称列在您的示例中提到的少数情况下为空,那么您可以使用正确的名称值更新名称表