0

我有一个结果集,对于相同的 ID,我有三行,因为有不同的 FirstName、LastName 和 BranchName。

例如:

ID  FirstName  LastName  BranchName Balance
101   Debra      Hays      Dayton   200
101   Daniel     Brinkman  Lynden   250
101   Daniel     Brinkman  HZBK     300

我想要此 ID 的一行显示任何 BranchName,但它应该显示该 BranchName 的相应 FirstName 和 LastName 以及(余额的总和)而不是随机组合,即它可以是 Debra Hays 和 Dayton 作为分支名称而不是 Lynden 作为 BranchName。

基本上 FirstName、LastName 和 BranchName 应该相互对应,而不是任何名字或姓氏组合。我想知道我们怎样才能做到这一点?

预期输出:

ID  FirstName LastName BranchName Sum(balance) 
101 Debra     Hays     Dayton     750 

或者

ID  FirstName LastName BranchName Sum(balance) 
101 Daniel    Brinkman Lynden     750 
4

1 回答 1

2
DECLARE @data TABLE(ID INT,FirstName VARCHAR(128),LastName VARCHAR(128),BranchName VARCHAR(128),Balance INT);
INSERT INTO @data(ID,FirstName,LastName,BranchName,Balance)VALUES
    (101,'Debra','Hays','Dayton',200),
    (101,'Daniel','Brinkman','Lynden',250),
    (101,'Daniel','Brinkman','HZBK',300);

;WITH cte AS (
    SELECT
        ID,
        FirstName,
        LastName,
        BranchName,
        rn=ROW_NUMBER() OVER(PARTITION BY ID ORDER BY FirstName,LastName,BranchName),
        Balance=SUM(Balance) OVER (PARTITION BY ID)
    FROM
        @data
)
SELECT
    ID,
    FirstName,
    LastName,
    BranchName,
    Balance
FROM
    cte
WHERE
    rn=1;

输出:

+-----+-----------+----------+------------+---------+
| ID  | FirstName | LastName | BranchName | Balance |
+-----+-----------+----------+------------+---------+
| 101 | Daniel    | Brinkman | HZBK       |     750 |
+-----+-----------+----------+------------+---------+
于 2016-02-04T22:22:21.337 回答