How to get the user details, user current level, next level, Rank in sql server

 ALTER PROCEDURE [dbo].[SP_GETUSERPROFILE]

@UserId int

AS

BEGIN

--checks whether user reported any tweet or not

IF EXISTS(SELECT * FROM OnGoingReports WHERE UserId=@UserId)

BEGIN

--if user already reported tweets then gets the user details and rank

select UserId,UserName,Name,UserReportedTweetCount,Rank 

    from 

(select UserId,UserName,Name,UserReportedTweetCount,ROW_NUMBER() OVER(ORDER BY UserReportedTweetCount desc) AS Rank 

from

     (select ogr.UserId,uc.UserName,Name,Count(*) UserReportedTweetCount from UserCredentials uc

      inner join OnGoingReports ogr

      on

      ogr.UserId=uc.UserId 

      GROUP BY ogr.UserId,uc.Name,uc.UserName) as TopList

) as UserRank 

    where UserId=@UserId

END

ELSE

BEGIN

--if user not reported any tweets then it get the default value as 0 and rank based on tweets reported

select UserId,UserName,Name,UserReportedTweetCount,Rank 

    from(select  UserId,UserName,Name,UserReportedTweetCount,ROW_NUMBER() OVER(ORDER BY UserReportedTweetCount desc) AS Rank 

from

     (select ogr.UserId,uc.UserName,Name,Count(*) UserReportedTweetCount from UserCredentials uc

  inner join OnGoingReports ogr

      on

      ogr.UserId=uc.UserId 

      GROUP BY ogr.UserId,uc.Name,uc.UserName

  union

  select uc.UserId,uc.UserName,Name,0 UserReportedTweetCount from UserCredentials uc 

  where UserId=@UserId 

  GROUP BY uc.UserId,uc.Name,uc.UserName 

  ) TopList)as UserRank  where UserId=@UserId

END


--checks user level

If exists(select * from UserLevel where UserId=@UserId)

begin

--if user level is already exists

select UserId,LevelName,BadgeName,NoofTweets from userlevel ul

inner join LevelBadge lb

on

lb.Id=ul.LevelBadgeId

inner join Badges b

on

lb.badgeid=b.badgeid

inner join Levels lvls

on

lvls.levelid=lb.levelid

where UserId=49

end

else

begin

   --if user level not defined or user is newly registered selects default level

select 'Level 1' as LevelName,'None' BadgeName ,0 NoofTweets

END


select description,profileimage,gender,dateofbirth,longitude,latitude,AuthToken,AuthTokenSecret from UserCredentials where UserId=@UserId


SELECT Top 1 LevelName as NextLevel,BadgeName as NextBadge,NoofTweets as NextLevelTarget FROM(

        SELECT

            ROW_NUMBER () OVER (ORDER BY  NoofTweets asc) AS RowNum,

            *

        FROM

            LevelBadge

    ) sub

inner join Levels lvls

on

lvls.LevelId=sub.LevelId

inner join Badges bdgs

on

bdgs.BadgeId=sub.BadgeId

WHERE

    NoofTweets>(SELECT Count(*) FROM OnGoingReports WHERE UserId=@UserId) 

END

Comments

Popular posts from this blog

Top MNC Interview Questions- Full Stack Developer

Interview Questions-2