根据其在SQL Server中的成就显示指定

根据其在SQL Server中的成就显示指定,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,这是我桌子的结构。我需要根据以下条件显示用户的指定: 现场执行人员如果(总和(gsv)

这是我桌子的结构。我需要根据以下条件显示用户的指定:

  • 现场执行人员如果(总和(gsv)<100,总和(PSV)<2500)

  • 现场经理如果(总和(PSV)>=100,总和(PSV)<500,总和(GSV)>=2500,总和(GSV)<10000)

  • 区域经理如果(总和(PSV)>=500,总和(PSV)<2500,总和(Gsv)>=10000,总和(Gsv)=2500,总和(PSV)<5000,总和(Gsv)>=50000,总和(Gsv)<2500000


如何显示带有总PSV和总GSV以及名称的
UserID

使用
CASE
语句和
groupby

CREATE TABLE [Changu143Aa].[UserSalesVolume]
(
    [ID] [bigint] IDENTITY(1,1) NOT NULL,
    [UserID] [bigint] NULL,
    [PSV] [decimal](18, 2) NULL DEFAULT ((0)),
    [GSV] [decimal](18, 2) NULL DEFAULT ((0)),
    [DateAdded] [datetime] NULL,
    [Pin] [uniqueidentifier] NULL
)
选择UserID,
案例
当总和(gsv)<100
和总和(PSV)<2500,则为“场激励”
当总和(PSV)>=100时
和总和(PSV)<500
和总和(GSV)>=2500
和总和(GSV)<10000,然后是“现场经理”
当总和(PSV)>=500时
和总和(PSV)<2500
和总和(Gsv)>=10000
和和(Gsv)=2500
和总和(PSV)<5000
和总和(GSV)>=50000
和总和(GSV)<2500000,则为“区域经理”
其他人
以名称结尾,
总和(PSV)为[总PSV],
总额(GSV)为[总GSV]
从你的桌子上
按用户ID分组

如果我理解正确,这是一个带有聚合的
案例

SELECT UserID,
       CASE
         WHEN Sum(gsv) < 100
              AND Sum(PSV) < 2500 THEN 'FIELD EXCICUTIVE'
         WHEN Sum(PSV) >= 100
              AND Sum(PSV) < 500
              AND Sum(GSV) >= 2500
              AND Sum(GSV) < 10000 THEN 'FIELD MANAGER'
         WHEN Sum(PSV) >= 500
              AND Sum(PSV) < 2500
              AND Sum(Gsv) >= 10000
              AND Sum(Gsv) <= 50000 THEN 'AREA MANAGER'
         WHEN Sum(PSV) >= 2500
              AND Sum(PSV) < 5000
              AND Sum(GSV) >= 50000
              AND Sum(GSV) < 2500000 THEN 'REGIONAL MANAGER'
         ELSE 'others'
       END      AS designation,
       Sum(PSV) AS [Total PSV],
       Sum(GSV) AS [Total GSV]
FROM   yourtable 
group by UserID 
选择UserId,
(当总和(gsv)<100且总和(PSV)<2500时,则为“现场主管”
当总和(gsv)>=100总和(PSV)<500且总和(gsv)>=2500且总和(gsv)<10000时
然后是“现场经理”

当sum(PSV)>=500,sum(PSV)<2500,sum(Gsv)>=10000,sum(Gsv)尝试以下操作:

select UserId,
       (case when sum(gsv) < 100 and Sum(PSV) < 2500 then 'Field Executive'
             when sum(gsv) >= 100 sum(PSV) < 500 and sum(GSV) >= 2500 and sum(GSV) < 10000
             then 'Field Manager'
             when sum(PSV) >= 500 and sum(PSV) < 2500 and sum(Gsv) >= 10000 and sum(Gsv) <= 50000 
             then 'Area Manager
             when sum(PSV) >= 2500 and sum(PSV) < 5000 and sum(GSV) >= 50000 and sum(GSV) < 2500000
             then 'Regional Manager
        end) as title
from [Changu143Aa].[UserSalesVolume] usv
group by UserId;
选择USERID,
TotalPSV,
总GSV,
案例
当总GSV<100且总PSV<2500时,则为“现场切除”

当TotalPSV>=100,TotalPSV<500,TotalGSV>=2500,TotalGSV=500,TotalPSV=10000,TotalGSV=2500,TotalPSV=50000,TotalGSV时,使用sql CASE函数

在您的情况下,应该是这样的(只有几行):

选择UserID,sum(PSV)作为sPSV,sum(GSV)作为sGSV(
案例
当sGSV<'100'和sPSV<'2500'时,则现场切除
当sPSV>='100'和sPSV<'500'和sGSV>='2500'和sGSV<'1000'时,区域经理
否则你会被发现的
(完)
来自UserSalesVolume
按用户ID分组;
SELECT  USERID,
        TotalPSV,
        TotalGSV,
        CASE 
           WHEN TotalGSV < 100 AND TotalPSV < 2500 THEN 'FIELD EXCICUTIVE'
           WHEN TotalPSV >= 100 AND TotalPSV < 500 AND TotalGSV >=2500 AND TotalGSV <10000 THEN 'FIELD MANAGER' 
           WHEN TotalPSV >=500 and TotalPSV  <2500 AND TotalGSV >=10000 AND TotalGSV  <=50000 THEN 'AREA MANAGER' 
           WHEN TotalPSV  >=2500 AND TotalPSV <5000 AND TotalGSV >=50000 AND TotalGSV  <2,500,000 THEN 'REGIONAL MANAGER' 
        END AS Designation
FROM(
      SELECT USERID,SUM(PSV) TotalPSV,SUM(GSV) TotalGSV
      FROM TableName
      GROUP BY USERID
    ) 
SELECT UserID, sum(PSV) as sPSV, sum(GSV) as sGSV,(
    CASE 
        WHEN sGSV < '100' && sPSV < '2500' THEN FIELD EXCICUTIVE
        WHEN sPSV >= '100' && sPSV < '500' && sGSV >= '2500' && sGSV < '1000' THEN AREA MANAGER
        ELSE yourelsedefintion
    END)
FROM UserSalesVolume
GROUP BY UserID;