Kev*_*vin 2 sql-server aggregate sql-server-2012
我在我的数据库上运行这个选择查询:
Select Item.ItemId, Item.ItemDescription, Bid.BidPrice, bid.BidDate,
Sum(bid.bidPrice) over () as TotalBids
from Bid
inner join Item on bid.ItemId=Item.ItemId
where BidDate between '2016-08-24' and '2017-11-15'
Run Code Online (Sandbox Code Playgroud)
我得到以下结果:
ItemId ItemDescription BidPrice BidDate TotalBids
1 Frame 35 2016-08-24 3624
4 Wooden chair 40 2016-10-25 3624
2 Car 3000 2017-10-26 3624
3 Stand Fan 29 2017-10-30 3624
5 Black Sofa 400 2017-11-11 3624
6 Cabinet 120 2017-11-15 3624
Run Code Online (Sandbox Code Playgroud)
我的问题是:是否有可能Total Bids
在每行的列中得到一个总数,而不是在列的底部得到一个总数BidPrice
?
你可以GROUP BY GROUPING SETS
在NULL
集合上使用
SELECT itemid, itemdescription, biddate, totalbids, sum(bidprice)
FROM f
GROUP BY GROUPING SETS ( (itemid,itemdescription,biddate,totalbids), () );
itemid | itemdescription | biddate | totalbids | sum
--------+-----------------+------------+-----------+------
1 | Frame | 2016-08-24 | 3624 | 35
2 | Car | 2017-10-26 | 3624 | 3000
3 | Stand Fan | 2017-10-30 | 3624 | 29
4 | Wooden chair | 2016-10-25 | 3624 | 40
5 | Black Sofa | 2017-11-11 | 3624 | 400
6 | Cabinet | 2017-11-15 | 3624 | 120
| | | | 3624
(7 rows)
Run Code Online (Sandbox Code Playgroud)
经验证可与 PostgreSQL 一起使用。SQL Server 2014 和 SQL Server 2016。
CREATE TABLE f(
itemid int,
itemdescription varchar(255),
bidprice int,
biddate date,
totalbids int
)
INSERT INTO f VALUES
( 1, 'Frame ', 35 , '2016-08-24', 3624 ),
( 4, 'Wooden chair', 40 , '2016-10-25', 3624 ),
( 2, 'Car ', 3000, '2017-10-26', 3624 ),
( 3, 'Stand Fan ', 29 , '2017-10-30', 3624 ),
( 5, 'Black Sofa ', 400 , '2017-11-11', 3624 ),
( 6, 'Cabinet ', 120 , '2017-11-15', 3624 );
Run Code Online (Sandbox Code Playgroud)
这样做的另一种方法是使用UNION
,
WITH t AS (SELECT * FROM f)
SELECT *
FROM f
UNION ALL
SELECT null, null, (SELECT sum(bidprice) FROM f), null, null;
Run Code Online (Sandbox Code Playgroud)
对于您的查询,第一种方法看起来像这样..
SELECT Item.ItemId, Item.ItemDescription, Bid.BidPrice, bid.BidDate, sum(bidPrice)
FROM Bid
INNER JOIN Item ON bid.ItemId=Item.ItemId
WHERE BidDate between '2016-08-24' and '2017-11-15'
GROUP BY GROUPING SETS ( (Item.ItemId, Item.ItemDescription, Bid.BidPrice, bid.BidDate), () )
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6261 次 |
最近记录: |