Как рассчитать сумму атрибута после внутреннего соединения?

Я хочу получить сумму набора результатов атрибута Price_amount. Ответ: 100+150=250, но как мне сделать так, чтобы это отображалось в наборе результатов? Это мой запрос до сих пор:

SELECT *
FROM tBoard
INNER JOIN tPrice
ON tBoard.PriceBand_ID = tPrice.PriceBand_ID
WHERE Board_start_date BETWEEN '20150101' AND '20150131'

Набор результатов:

Board_ID|Board_start_date|Board_end_date|PriceBand_ID|Price_amount
001     |01-01-2015      |16-01-2015    |1           |100
002     |01-01-2015      |28-01-2015    |15          |150

Я использую SQL SERVER MANAGEMENT STUDIO 2012 Express.


person Jez Clarke    schedule 18.04.2016    source источник
comment
Может быть, СУММ(Цена_сумма)??? Не совсем понятно, что вы пытаетесь здесь сделать. Это было бы отличным местом для начала. spaghettidba.com /2015/04/24/   -  person Sean Lange    schedule 18.04.2016
comment
сумма может не работать, так как вам придется группировать, и ничего не отличается ... вы можете попробовать SUM(Price_amount) OVER () .. но опять же, вам может просто понадобиться один столбец и одна строка, так что ..   -  person JamieD77    schedule 18.04.2016
comment
Просто: SELECT Board_ID, SUM(Price_amount) AS SumOfPriceAmount FROM tBoard INNER JOIN tPrice ON tBoard.PriceBand_ID = tPrice.PriceBand_ID WHERE Board_start_date BETWEEN '20150101' AND '20150131' GROUP BY Board_ID Довольно простой SQL. Вы также можете настроить это графически в SSMS2012. Я бы поискал несколько руководств по синтаксису SQL и самой программе SSMS.   -  person Boyd P    schedule 18.04.2016


Ответы (2)


Если вы хотите увидеть детали, вы можете использовать агрегатные функции окна.

Одно из преимуществ использования оконных функций заключается в том, что, в отличие от групповых запросов, оконные запросы не скрывают детали. Они возвращают строку для каждой строки базового запроса.

Используя предложение OVER, вы определяете окно строк для функции.

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

 SELECT *, sum(Price_amount) over(order by Board_ID rows between UNBOUNDED PRECEDING and current row) AS [SUM]
 FROM tBoard
 INNER JOIN tPrice
 ON tBoard.PriceBand_ID = tPrice.PriceBand_ID
 WHERE Board_start_date BETWEEN '20150101' AND '20150131'

или вы можете сделать с базовой группой по предложению (без подробностей)

 SELECT Board_ID,Board_start_date,Board_end_date,PriceBand_ID,sum(Price_amount) AS [SUM]
 FROM tBoard
 INNER JOIN tPrice
 ON tBoard.PriceBand_ID = tPrice.PriceBand_ID
 WHERE Board_start_date BETWEEN '20150101' AND '20150131'
 GROUP BY Board_ID,Board_start_date,Board_end_date,PriceBand_ID
person Dejan    schedule 18.04.2016

Просто используйте оконные функции:

SELECT *, SUM(price_amount) OVER () as total_price_amount
FROM tBoard b INNER JOIN
     tPrice p
     ON b.PriceBand_ID = p.PriceBand_ID
WHERE Board_start_date BETWEEN '20150101' AND '20150131';
person Gordon Linoff    schedule 18.04.2016