Как выбрать значения столбцов, чтобы они соответствовали друг другу?
У меня есть набор результатов, где для одного и того же идентификатора у меня есть три строки, потому что есть разные FirstName, LastName и BranchName.
Например:
ID FirstName LastName BranchName Balance
101 Debra Hays Dayton 200
101 Daniel Brinkman Lynden 250
101 Daniel Brinkman HZBK 300
Мне нужна одна строка для этого идентификатора, показывающая какое-либо BranchName, но в нем должны быть указаны соответствующие FirstName и LastName для этого BranchName и (сумма баланса) неслучайная комбинация, т. Е. Это может быть Дебра Хейс с Дейтоном в качестве фирменного наименования, а не Линден в качестве 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
1 ответ
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 |
+-----+-----------+----------+------------+---------+