急死我啦,救命啊,好多天了!!!!!

sherly77998 2007-11-17 06:59:07
创建一个多表视图,从三个表中选取所要字段,其中一个表还使用两次,代码如下:
select
Add_Item.Id as ItemId,Add_Item.Item_desc as 物品名称及描述,max(Item_price.Price) as 最高出价,
[User]. Name as 最高出价者, Add_Item.Base_price as 底价, User_1.Name as 货主
from [User] User_1 left outer join Item_price
inner join Add_Item on User_1.Id=Add_Item.[user_id ]
inner join [User] on [User].Id<>Item_price.UserId
group by Add_Item.Id,Add_Item.Item_desc,item_price.price,Add_Item.Base_price,[User].Name,User_1.Name
却无论如何达不到我要的效果,天啊,救命啊
就像个拍卖的,发布者不能是加价者

谢谢啦,帮帮我啊
...全文
249 39 打赏 收藏 转发到动态 举报
写回复
用AI写文章
39 条回复
切换为时间正序
请发表友善的回复…
发表回复
fcuandy 2007-11-18
  • 打赏
  • 举报
回复
我在14楼的语句

SELECT b.*,a.account 货主,d.account 买家
后面加上
c.price as 最高出价



SELECT b.*,a.account 货主,d.account 最高出价的买家,c.price 最高出价
from ...

c里的price本来就是取的max(price)聚合后连表得出的记录行.

不需要再max

你试试看下.
sherly77998 2007-11-18
  • 打赏
  • 举报
回复
ye .......终于可以了,太高兴了,谢谢了,终于解脱了,你们太厉害啦,
庆祝去~~~~~
Limpire 2007-11-18
  • 打赏
  • 举报
回复
有没有:

select
拍卖物.Id as ItemId,
拍卖物.Item_desc as 物品名称及描述,
竞投者.Price as 最高出价,
竞投者.Name as 最高出价者,
拍卖物.Base_price as 底价,
持有者.Name as 货主
from
Add_Item as 拍卖物
inner join
[User] as 持有者
on 拍卖物.[User_ID]=持有者.ID
left join
(
select
a.Name,
b.ItemID,
b.Price,
b.UserID
from
[User] as a
inner join
Item_price as b
on a.ID=b.UserID
where b.Price=(select max(Price) from Item_price where ItemID=b.ItemID)
) as 竞投者
on 拍卖物.ID=竞投者.ItemID
sherly77998 2007-11-18
  • 打赏
  • 举报
回复
这样也有的
Limpire 2007-11-18
  • 打赏
  • 举报
回复
有没有:

select
拍卖物.Id as ItemId,
拍卖物.Item_desc as 物品名称及描述,
--竞投者.Price as 最高出价,
--竞投者.Name as 最高出价者,
拍卖物.Base_price as 底价,
持有者.Name as 货主
from
Add_Item as 拍卖物
inner join
[User] as 持有者
on 拍卖物.[User_ID]=持有者.ID
sherly77998 2007-11-18
  • 打赏
  • 举报
回复
...........
where ItemID=b.ItemID这样就有,
ItemID=a.ItemID)这样是列名ItemID无效
Limpire 2007-11-18
  • 打赏
  • 举报
回复
        select
a.Name,
b.ItemID,
b.Price,
b.UserID
from
[User] as a
inner join
Item_price as b
on a.ID=b.UserID
where b.Price=(select max(Price) from Item_price where ItemID=b.ItemID) --> a.ItemID->b.ItemID
Limpire 2007-11-18
  • 打赏
  • 举报
回复
单执行这个,有没有数据:

        select
a.Name,
b.ItemID,
b.Price,
b.UserID
from
[User] as a
inner join
Item_price as b
on a.ID=b.UserID
where b.Price=(select max(Price) from Item_price where ItemID=a.ItemID)
sherly77998 2007-11-18
  • 打赏
  • 举报
回复
还是空有字段,无数据啊
Limpire 2007-11-18
  • 打赏
  • 举报
回复
应该OK了
Limpire 2007-11-18
  • 打赏
  • 举报
回复
where b.Price=(select max(Price) from Item_price where ItemID=a.ItemID)
-->
where b.Price=(select max(Price) from Item_price where ItemID=b.ItemID)
sherly77998 2007-11-18
  • 打赏
  • 举报
回复
where ItemID=a.ItemID这里应该是where b.ItemID=a.ID吧,
改过后的问题是,只有字段,没有数据,天啊!!
还有就是,你这里似乎没有把竞投者区分好,
如 竞投者.Price as 最高出价,
竞投者.Name as 最高出价者,
这里的竞投者究竟指的是哪个表呢,搞混了,呵呵
对不起啊,因这个问题关联东西太多,好少人愿意答我,倚望你能帮我到底,无限感激~~
Limpire 2007-11-18
  • 打赏
  • 举报
回复
中文别名只是便于理解,不建议使用。
Limpire 2007-11-18
  • 打赏
  • 举报
回复
对象名'user' 无效,说明你没这个表,是不是表名写错了
Limpire 2007-11-18
  • 打赏
  • 举报
回复
select
拍卖物.Id as ItemId,
拍卖物.Item_desc as 物品名称及描述,
竞投者.Price as 最高出价,
竞投者.Name as 最高出价者,
拍卖物.Base_price as 底价,
持有者.Name as 货主
from
Add_Item as 拍卖物
inner join
[User] as 持有者
on 拍卖物.[User_ID]=持有者.ID
left join
(
select
a.Name,
b.ItemID,
b.Price,
b.UserID
from
[User] as a
inner join
Item_price as b
on a.ID=b.UserID
where b.Price=(select max(Price) from Item_price where ItemID=a.ItemID)
--这里不考虑最高价重复问题,应该在业务逻辑控制竞价只能高于上一轮竞价
) as 竞投者
on 拍卖物.ID=竞投者.ItemID
where
拍卖物.[User_ID]<>竞投者.UserID -->自己叫价不算,这也应该在业务逻辑控制。
netcup 2007-11-18
  • 打赏
  • 举报
回复
赞fcuandy一个,真是十分有耐心呀!!细致入微.佩服!
sherly77998 2007-11-18
  • 打赏
  • 举报
回复
SELECT b.Id as ItemId,b.Item_desc as 物品名称及描述,c.Price as 最高出价,
d. Name as 最高出价者, b.Base_price as 底价, a.Name as 货主
from add_item b --货物表
inner join [user] a --用户表,用作货主
on b.user_id=a.id
left join(
select x.ItemId,x.userid, x.price from item_price x --取得每个货物的最高出价记录
inner join
(select itemid,max(price) mp from item_price group by itemid) y --每个货物的最高出价
on x.itemid=y.itemid and x.price=mp /*b.itemid改为y.itemid*/
) c --所有有出货价的货物最高出价记录
on b.id=c.itemid
left join [user] d --用户表,用作买家
on d.id=c.userid

服务器: 消息 208,级别 16,状态 1,行 1
对象名 'user' 无效。
服务器: 消息 208,级别 16,状态 1,行 1
对象名 'user' 无效。

没办法了,唉
sherly77998 2007-11-17
  • 打赏
  • 举报
回复
我改过后是这样,当然了,结果还是没有出来
SELECT b.Id as ItemId,b.Item_desc as 物品名称及描述,max(x.Price) as 最高出价,
d. Name as 最高出价者, b.Base_price as 底价, a.Name as 货主
from add_item b --货物表
inner join [user] a --用户表,用作货主
on b.user_id=a.id
left join(
select x.ItemId,x.userid, x.price from item_price x --取得每个货物的最高出价记录
inner join
(select itemid,max(price) mp from item_price group by itemid) y --每个货物的最高出价
on x.itemid=y.itemid and x.price=mp /*b.itemid改为y.itemid*/
) c --所有有出货价的货物最高出价记录
on b.id=c.itemid
left join [user] d --用户表,用作买家
on d.id=c.userid

列前缀 'x' 与查询中所用的表名或别名不匹配。
其实我有点看不明白你这个程序,太多嵌套了,呵呵,想问一下,为什么我开始的方法不行?看来这个问题今天还是解决不了了,请教一下,我怎么给你分数啊,呵呵,太笨了我

fcuandy 2007-11-17
  • 打赏
  • 举报
回复
嗯.程序逻辑上应该严谨一点.呵呵.
另外,上面我取的是最高价.我的意思是说,如果最高价几个人有同样的出价,那么会有多笔记录产生. 也即,当一个物品再次出价时,最须大于现有的最高价.

有问题可以再发上来大家一起讨论.
sherly77998 2007-11-17
  • 打赏
  • 举报
回复
好的,我再认真看看,不过我是要只列出最高出价的,还有就是,自己发布的商品不能自己去加价
非常感谢你,谢谢了,很有用!~
加载更多回复(19)

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧