我是SQL Server的新手。我正在尝试将我的Access数据库转换为SQL Server。 这是我的问题,我在这里有一张桌子。
CarID CustomerName Date Replied StatusID Offer
1 Karl 05-01-2013 1 $1000
1 Karl 05-02-2013 1 $1000
1 Kathy 05-03-2013 1 $1500
1 Karl 05-04-2013 2 $1000
2 Karl 05-04-2013 1 $2000
我想将数据显示为
CarID CustomerName Date Replied StatusID Offer
1 Kathy 05-03-2013 1 $1500
1 Karl 05-04-2013 2 $1000
2 Karl 05-04-2013 1 $2000
在MS Access中
I used SELECT CarID, Last(CustomerName) as CustomerName, Max(Date) as Date Replied, Last(StatusID) as StatusID, Last(Offer) as Offer from viewCarOffers GROUP BY CarID
SQL Server问题。它没有最后的功能。我对如何使用SQL Server获得相同的结果一无所知。
我希望有人可以提供帮助。感谢。
答案 0 :(得分:2)
试试这个
SELECT
CarId,
CustomerName,
DATE,
StatusId,
Offer
FROM
(
SELECT
ROW_NUMBER() OVER ( PARTITION BY carid, CustomerName ORDER BY DATE DESC) ROW, *
FROM viewCarOffers
) vco
WHERE ROW = 1
ORDER BY CarId, offer DESC
答案 1 :(得分:0)
尝试
SELECT o.CarID,
o.CustomerName,
o.Date 'Date Replied',
o.StatusID,
o.Offer
FROM
(
SELECT CarID, CustomerName, MAX(Date) Date
FROM viewCarOffers
GROUP BY CarID, CustomerName
) q JOIN viewCarOffers o
ON o.CarID = q.CarID
AND o.CustomerName = q.CustomerName
AND q.Date = o.Date
ORDER BY CarID, CustomerName
输出:
| CARID | CUSTOMERNAME | DATE REPLIED | STATUSID | OFFER |
------------------------------------------------------------------------
| 1 | Karl | May, 04 2013 00:00:00+0000 | 2 | $1000 |
| 1 | Kathy | May, 03 2013 00:00:00+0000 | 1 | $1500 |
| 2 | Karl | May, 04 2013 00:00:00+0000 | 1 | $2000 |
这是 SQLFiddle 演示
答案 2 :(得分:0)
在Sql Server中,您可以自行加入选择最大的日期。
SELECT co.CarID,
Last.CustomerName AS CustomerName,
Last.Date AS [DATE Replied],
Last.StatusID AS StatusID,
Last.Offer AS Offer
FROM viewCarOffers co
INNER JOIN
(
SELECT ROW_NUMBER() OVER ( PARTITION BY carid ORDER BY DATE DESC) ROW,
CarId,
CustomerName,
DATE,
StatusId,
Offer
FROM viewCarOffers co2
) LAST ON co.carid = last.carid AND last.row = 1
GROUP BY co.CarId, Last.CustomerName, Last.Date, Last.StatusId, Last.Offer
我不太了解你要求的结果,难道你的选择不应该只为每辆车返回一行吗?