繁体   English   中英

获取给出评论的客户名称

[英]fetch customer name who has given the review

请参考我已经问过的这个问题:

计算SQL Server中的平均评分

一切都工作正常。我也得到了期望的输出,但是我只想要给出评论的客户名称。

这是我从上面的链接中获取的查询:

 SELECT u.id,u.fullname,u.email,u.ServiceDescription, u.Skills,c.Name,rv.Reviews,
           ISNULL(rv.averagerating, 0) averagerating
    FROM UserDetails u 
    INNER JOIN VendorInCategory v ON v.VendorId=u.Id 
    INNER JOIN CategoryMaster c ON v.CategoryId=c.Id 
    LEFT JOIN (SELECT rv.VendorId,rv.Reviews, AVG(rv.RatingValue) averagerating FROM Review rv GROUP BY rv.VendorId,rv.Reviews) rv ON u.Id=rv.VendorId  
    WHERE ((u.ServiceDescription LIKE '%SearchKeyword%') OR (u.Skills LIKE '%@SearchKeyword%') OR 
           (c.Name LIKE '%@SearchKeyword%'))
    ORDER BY ISNULL(rv.averagerating, 0) DESC;

现在,可以在该查询中获取给出评论的客户名称了???

的UserDetails:

id    Name       Servicedescription         Skills
1     john         Plaster                  plaster

2     abc          construction             construction

3     xyz          plaster                  plaster

4     pqr          null                     null(not vendor)

5     lmn          null                     null(not vendor)

评论

id     CustomerId     Vendorid    rating     reviews    

1       4                1          3         fdd

2       5                1          3         dfg

预期产量:

VendorId    ServiceDescription     Skills          rating   customername    reviews

1              plaster              plaster           3           pqr            good

3              plaster              plaster           3           lmn            bad  

我不想计算平均评分。

有人可以帮我做到这一点吗????

只需在用户表和审阅表之间进行Left Join作为Inner Join然后从用户表中选择名称列即可

尝试以下查询

样本数据

create table UserDetails(
    Id int,
    Name Varchar(250),
    ServiceDescription varchar(20),
    Skills varchar(20)
)
create table Review(
    Id int,
    CustomerId int,
    VendorId int,
    Rating int,
    review Varchar(25)
)

insert into UserDetails values(1, 'John','Plaster', 'plaster'),(2,'Paul', 'construction', 'construction'),(3,'AAA', 'plaster', 'plaster'),(4,'PQR',null,null),
(5,'lmn',null,null)
insert into Review values(1, 4, 1, 3,'Good'),(2, 5, 1, 0,'Bad');

询问

   select
    VendorId=r.CustomerId,
    vu.ServiceDescription,
    vu.Skills,
    AverageRating=r.rating,
    CustomerName=ru.Name,
    reviews=r.review
FROM Review r
JOIN UserDetails vu ON r.Vendorid = vu.id
JOIN UserDetails ru ON r.CustomerId = ru.id
where
    ru.ServiceDescription is null
    or ru.Skills is null
group by 
    r.CustomerId,
    ru.Name,
    vu.ServiceDescription,
    vu.Skills,r.rating,r.review
order by AverageRating desc

您无法完全按照自己的意愿进行操作,因为平均是一个平均值:如果十个不同的人对该供应商进行了审查,该怎么办? 应该显示谁的名字?

但是,您可以为每个评论单独放置一行。

如果那是您想要的,请尝试此。

编辑:更新为包括Review.reviews。

SELECT vu.id AS VendorId, vu.ServiceDescription, vu.Skills,
       r.RatingValue AS rating, ru.name AS customername, r.reviews
FROM Review r
JOIN UserDetails vu ON r.Vendorid = vu.id
JOIN UserDetails ru ON r.CustomerId = ru.id

根据我得到的答案,我已经准备好此查询,并且预期的输出即将到来:

SELECT u.id,u.fullname,u.email,u.ServiceDescription, 
u.Skills,c.Name,r.Reviews,r.RatingValue,ru.Id,
ru.Fullname FROM UserDetails u 
INNER JOIN VendorInCategory v ON v.VendorId=u.Id 
INNER JOIN CategoryMaster c ON v.CategoryId=c.Id 
left join Review r
    on r.VendorId = u.id
left JOIN UserDetails ru ON r.CustomerId = ru.id
WHERE ((u.ServiceDescription LIKE '%Plaster%') OR (u.Skills LIKE '%Plaster%') OR 
       (c.Name LIKE '%Plaster%'))
ORDER BY ISNULL(r.RatingValue, 0) DESC;

现在,从下面您可以看到,链接我的数据库设计:

计算SQL Server中的平均评分

在此处输入图片说明

在这里您可以看到灰泥是建筑的子类别(Id:40)

因此,如果我在categorymaster中搜索任何单词,我想获取parentcategory。

如果在子类别中找到单词,则获取其父类别名称,否则仅获取父类别名称。

任何人都可以编辑我的查询以实现此功能吗???

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM