首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

向大家请问一个很复杂的视图?

2012-02-14 
向大家请教一个很复杂的视图???两张表UsePro(Id,UserId,ProName,ProDesc,CreateTime)商品表UserInfo(UserI

向大家请教一个很复杂的视图???
两张表  
  UsePro(Id,UserId,ProName,ProDesc,CreateTime)     商品表
  UserInfo(UserId,UserName,HeadImage)     用户表

现在是建立一张   Distinct   ProName     的视图

因为同一个ProName   有可能有不同的UserId   发上来。

表如下:
    UsePro                                                                           UserInfo
Id   ProName     UserId         createtime                         Id       USerName
1         百里           1                   2007-1-1                           1         ddddd
2         百里           2                   2007-1-30                         2           ffff
3           的             3                                                             3         dddd


视图如下:      

          ProName               UserId                     UserName                   Count
            物品名     最新的一个发布用户     对应的用户名         该物品对应多少个UserId

              百里                   2                                       ffff                         2
                的                     3                                       dddd                           1


[解决办法]
--try:
select A.proname,A.userid,C.username, (select count(*) from usepro where proName=A.proname) as [count]
from usepro A
inner join
(select proname, max(createtime) as createtime from UsePro group by proname) B
on A.proname=B.proname and A.createtime=B.createtime
inner join userinfo C
on A.userid=C.id
[解决办法]
CREATE TABLE UsePro
(
Id INT,
UserId INT,
ProName VARCHAR(50),
CreateTime DATETIME
)
CREATE TABLE UserInfo
(
UserId INT,
UserName VARCHAR(50)
)
INSERT INTO UsePro
SELECT 1,1, '百里 ', '2007-1-1 ' UNION ALL
SELECT 2,2, '百里 ', '2007-1-30 ' UNION ALL


SELECT 3,3, '的 ', '2007-1-30 '
INSERT INTO UserInfo
SELECT 1, 'ddddd ' UNION ALL
SELECT 2, 'ffff ' UNION ALL
SELECT 3, 'dddd '
GO
CREATE VIEW VIEW_TEST
AS
SELECT A.UserId,B.UserName,A.ProName,A.CreateTime
FROM UsePro A INNER JOIN UserInfo
B ON A.UserId=B.UserId INNER JOIN
(SELECT ProName,max(CreateTime) CreateTime,COUNT(1) NUM FROM UsePro GROUP BY ProName) C
ON A.CreateTime=C.CreateTime AND A.ProName=C.ProName
GO
SELECT * FROM VIEW_TEST
DROP VIEW VIEW_TEST
DROP TABLE UsePro
DROP TABLE UserInfo
--结果
UserId UserName ProName CreateTime
----------- -------------------------------------------------- -------------------------------------------------- -----------------------
3 dddd 的 2007-01-30 00:00:00.000
2 ffff 百里

热点排行