Sql server 使用自定义内部联接进行更新的帮助-T-SQL
我为每个位置类型(城市、街道、国家等)提供了一个表格 现在我有了一个存储过程,它需要返回一个“位置”列表,以及它们的“最高级别的评审” 我有一张临时的桌子来保存“位置”(可以是任何东西——街道、城市等等) 我先将城市、街道、国家等数据插入临时表 最后,我得到了一个“位置”临时表,对于其中的每一个位置,我都需要获得最高评级的评论。(最高=基本分数,例如5.0) 基数:Sql server 使用自定义内部联接进行更新的帮助-T-SQL,sql-server,tsql,sql-server-2008,inner-join,Sql Server,Tsql,Sql Server 2008,Inner Join,我为每个位置类型(城市、街道、国家等)提供了一个表格 现在我有了一个存储过程,它需要返回一个“位置”列表,以及它们的“最高级别的评审” 我有一张临时的桌子来保存“位置”(可以是任何东西——街道、城市等等) 我先将城市、街道、国家等数据插入临时表 最后,我得到了一个“位置”临时表,对于其中的每一个位置,我都需要获得最高评级的评论。(最高=基本分数,例如5.0) 基数: 位置Many..Manypost(PostLocations连接表) 发布1..1审查 复习1..1分数 位置临时表: DEC
- 位置Many..Manypost(PostLocations连接表)
- 发布1..1审查
- 复习1..1分数
DECLARE @ResultSet TABLE
(
[LocationId] INT,
[TopReviewId] INT, -- starts out NULL, need to fill in
[TopReviewContent] NVARCHAR(MAX) -- starts out NULL, need to fill in
)
-- Get the Top Rated Review for each location.
UPDATE ResultSet
SET TopReviewId = TopReview.PostId,
TopReviewContent = TopReview.Content
FROM @ResultSet ResultSet
INNER JOIN
(
SELECT TOP 1 pl.LocationId, p.postid, p.Content
FROM PostLocations pl
INNER JOIN Posts p
ON pl.PostId = p.PostId
INNER JOIN Reviews r
ON p.PostId = r.PostId
INNER JOIN Scores s
ON r.ScoreId = s.ScoreId
INNER JOIN @ResultSet rs
ON pl.LocationId = rs.LocationId
ORDER BY s.BaseScore DESC
) AS TopReview
ON ResultSet.LocationId = TopReview.LocationId
INNER JOIN PostLocations pl
ON ResultSet.LocationId = pl.LocationId
INNER JOIN Posts p
ON pl.PostId = p.PostId
INNER JOIN Reviews r
ON pl.PostId = r.PostId
-- Now return the Results:
SELECT TOP 10
[LocationId],
[TopReviewId],
[TopReviewContent]
FROM @ResultSet
这是我当前得到的输出
LocationId TopReviewId TopReviewContent
1 12313 Blah Blah
2 NULL NULL
3 NULL NULL
这是我想要的输出
LocationId TopReviewId TopReviewContent
1 12313 Blah Blah
2 44323 Meh meh
3 5345345 Pew pew
也许这很幼稚,但您是否尝试过:
select c.name, max(price)
from
customer c inner join
product p on p.customerid = c.customerid
group by c.name
如果你想得到最好的评论,你可以这样做:
SELECT TOP 1 pl.LocationId, p.postid, p.Content
FROM PostLocations pl
INNER JOIN Posts p
ON pl.PostId = p.PostId
INNER JOIN Reviews r
ON p.PostId = r.PostId
INNER JOIN Scores s
ON r.ScoreId = s.ScoreId
ORDER BY s.BaseScore DESC
SELECT pl.LocationId, p.postid, p.Content, max(s.BaseScore)
FROM PostLocations pl
INNER JOIN Posts p
ON pl.PostId = p.PostId
INNER JOIN Reviews r
ON p.PostId = r.PostId
INNER JOIN Scores s
ON r.ScoreId = s.ScoreId
group by p1.locationid, p.postid, p.content
如果您希望每个位置都有最好的评论,您可以这样做:
SELECT TOP 1 pl.LocationId, p.postid, p.Content
FROM PostLocations pl
INNER JOIN Posts p
ON pl.PostId = p.PostId
INNER JOIN Reviews r
ON p.PostId = r.PostId
INNER JOIN Scores s
ON r.ScoreId = s.ScoreId
ORDER BY s.BaseScore DESC
SELECT pl.LocationId, p.postid, p.Content, max(s.BaseScore)
FROM PostLocations pl
INNER JOIN Posts p
ON pl.PostId = p.PostId
INNER JOIN Reviews r
ON p.PostId = r.PostId
INNER JOIN Scores s
ON r.ScoreId = s.ScoreId
group by p1.locationid, p.postid, p.content
也许这很幼稚,但您是否尝试过:
select c.name, max(price)
from
customer c inner join
product p on p.customerid = c.customerid
group by c.name
如果你想得到最好的评论,你可以这样做:
SELECT TOP 1 pl.LocationId, p.postid, p.Content
FROM PostLocations pl
INNER JOIN Posts p
ON pl.PostId = p.PostId
INNER JOIN Reviews r
ON p.PostId = r.PostId
INNER JOIN Scores s
ON r.ScoreId = s.ScoreId
ORDER BY s.BaseScore DESC
SELECT pl.LocationId, p.postid, p.Content, max(s.BaseScore)
FROM PostLocations pl
INNER JOIN Posts p
ON pl.PostId = p.PostId
INNER JOIN Reviews r
ON p.PostId = r.PostId
INNER JOIN Scores s
ON r.ScoreId = s.ScoreId
group by p1.locationid, p.postid, p.content
如果您希望每个位置都有最好的评论,您可以这样做:
SELECT TOP 1 pl.LocationId, p.postid, p.Content
FROM PostLocations pl
INNER JOIN Posts p
ON pl.PostId = p.PostId
INNER JOIN Reviews r
ON p.PostId = r.PostId
INNER JOIN Scores s
ON r.ScoreId = s.ScoreId
ORDER BY s.BaseScore DESC
SELECT pl.LocationId, p.postid, p.Content, max(s.BaseScore)
FROM PostLocations pl
INNER JOIN Posts p
ON pl.PostId = p.PostId
INNER JOIN Reviews r
ON p.PostId = r.PostId
INNER JOIN Scores s
ON r.ScoreId = s.ScoreId
group by p1.locationid, p.postid, p.content
我有点不明白你想做什么。但是要获得客户名单以及他们的最高订单ID,您就不能这样做吗
select customers.name, orders.orderid
from customers join orders on customers.customerid = orders.customerid
group by customers.customerid
having max(orders.price);
我有点不明白你想做什么。但是要获得客户名单以及他们的最高订单ID,您就不能这样做吗
select customers.name, orders.orderid
from customers join orders on customers.customerid = orders.customerid
group by customers.customerid
having max(orders.price);
任务是否需要插入到临时表中?我想你可以在没有临时表的情况下找到每个客户的最高价格。更新声明让人分心——你的预期产出是什么?也许我不应该使用虚构的表/场景。我会更新Q.@Ramy,@OMG Ponies-现在大家看看-再一次,为混乱感到抱歉。所以,让我看看我是否有这个,你只是想要顶部的评论。不是每个位置的顶部审阅?您的任务是否需要插入到临时表中?我想你可以在没有临时表的情况下找到每个客户的最高价格。更新声明让人分心——你的预期产出是什么?也许我不应该使用虚构的表/场景。我会更新Q.@Ramy,@OMG Ponies-现在大家看看-再一次,为混乱感到抱歉。所以,让我看看我是否有这个,你只是想要顶部的评论。不是每个位置的顶级评论?