2015-06-23 7 views
-1

Я пробовал искать это, но получаю много фильтров на целых таблицах. Я использую Microsoft SQL Server Management Studio 11.0.2100.60.Способ выбора определенных значений строк на основе значений другого столбца?

В настоящее время мой запрос возвращает примерно следующее.

╔═══════════╦═════════╦════════════════╦═══════╦════════════╗ 
║ Account ║ Balance ║ Invoice  ║ Code ║ Date ║ 
╠═══════════╬═════════╬════════════════╬═══════╬════════════╣ 
║ 500018802 ║ -80.00 ║ 500018802-0002 ║ PBH ║ 2012-04-05 ║ 
║ 500018802 ║ -140.00 ║ 500018802-0003 ║ DLPBH ║ 2012-05-05 ║ 
║ 500018802 ║ -60.00 ║ 500018802-0006 ║ DLPBH ║ 2012-08-05 ║ 
║ 500018802 ║ -140.00 ║ 500018802-0001 ║ PBH ║ 2012-03-23 ║ 
╚═══════════╩═════════╩════════════════╩═══════╩════════════╝ 

То, что я пытаюсь сделать, это группировать данные, чтобы получить один номер счета при суммировании Баланса. Однако я не могу сделать простую группу, потому что счет/код/​​даты разные. Итак, есть ли способ выбрать определенные значения строк в зависимости от других значений столбцов? В идеале я хочу, чтобы значения кода и даты были такими, какие они есть в строке, где номер счета имеет минимальное значение при суммировании баланса. Таким образом, в данном случае, это последняя строка, и мой результат был бы:

╔═══════════╦═════════╦════════════════╦══════╦════════════╗ 
║ Account ║ Balance ║ Invoice  ║ Code ║ Date ║ 
╠═══════════╬═════════╬════════════════╬══════╬════════════╣ 
║ 500018802 ║ -420.00 ║ 500018802-0001 ║ PBH ║ 2012-03-23 ║ 
╚═══════════╩═════════╩════════════════╩══════╩════════════╝ 

Это только данные для одной учетной записи. В моей таблице было бы много строк многих учетных записей.

EDIT * Это мой текущий запрос.

SELECT Account 
    SUM(Balance) AS Balance, 
    Invoice, 
    Code, 
    Date 
FROM MyData 
GROUP BY Account, Invoice, Code, Date 
ORDER BY Account 
+0

благодарю вас так много, чтобы Politank-Z для табличного редактирования! Я пробовал искать вставки чистых таблиц, но не мог найти ответ! –

+0

Вы можете поместить 4 пробела в начале каждой строки или выделить выделенный текст и нажать кнопку '{}' в текстовом редакторе. В последнем случае управление-k также работает, но это также горячая клавиша в некоторых браузерах. –

+0

Спасибо! Я просто попробовал это в редактировании. –

ответ

1

Вы можете попробовать это

WITH cte AS(
    SELECT 
     Account, 
     SUM(Balance) OVER (PARTITION BY Account) Balance, 
     Invoice, 
     Code, 
     [Date], 
     ROW_NUMBER() OVER (PARTITION BY Account ORDER BY Invoice) RN 
    FROM 
     Accounts 
) 
SELECT * 
FROM cte 
WHERE RN = 1 
+0

Это сработало для меня, спасибо вам большое! –

0

Вот несколько примеров:

with cte1 as(your current query), 
cte2 as(select *, 
       row_number() over(partition by account order by invoice) rn, 
       sum(balance) over(partition by account) as b 
     from cte1) 
select * from cte2 
where rn = 1