Sql server 将代码从多个字段中获取平均值转换为从多个字段中获取最大值的简单方法

Sql server 将代码从多个字段中获取平均值转换为从多个字段中获取最大值的简单方法,sql-server,tsql,Sql Server,Tsql,我使用以下sql获取三个地区一周中每天的总销售额: SELECT SUM(CASE WHEN DATEPART(weekday, [the_date]) NOT IN (1,3,4,5,6,7) THEN [USA_SALES]+[UK_SALES]+[ASIA_SALES] END) as [Monday_SUM_sales], SUM(CASE WHEN DATEPART(weekday, [the_date]) NOT IN (1,2,4,5,6,7) THEN [U

我使用以下sql获取三个地区一周中每天的总销售额:

SELECT 
    SUM(CASE WHEN DATEPART(weekday, [the_date]) NOT IN (1,3,4,5,6,7) THEN  [USA_SALES]+[UK_SALES]+[ASIA_SALES] END) as [Monday_SUM_sales],
    SUM(CASE WHEN DATEPART(weekday, [the_date]) NOT IN (1,2,4,5,6,7) THEN  [USA_SALES]+[UK_SALES]+[ASIA_SALES] END) as [Tuesday_SUM_sales],
    SUM(CASE WHEN DATEPART(weekday, [the_date]) NOT IN (1,2,3,5,6,7) THEN  [USA_SALES]+[UK_SALES]+[ASIA_SALES] END) as [Wednesday_SUM_sales],
    SUM(CASE WHEN DATEPART(weekday, [the_date]) NOT IN (1,2,3,4,6,7) THEN  [USA_SALES]+[UK_SALES]+[ASIA_SALES] END) as [Thursday_SUM_sales],
    SUM(CASE WHEN DATEPART(weekday, [the_date]) NOT IN (1,2,3,4,5,7) THEN  [USA_SALES]+[UK_SALES]+[ASIA_SALES] END) as [Friday_SUM_sales],
    SUM(CASE WHEN DATEPART(weekday, [the_date]) NOT IN (1,2,3,4,5,6) THEN  [USA_SALES]+[UK_SALES]+[ASIA_SALES] END) as [Saturday_SUM_sales],
    SUM(CASE WHEN DATEPART(weekday, [the_date]) NOT IN (2,3,4,5,6,7) THEN  [USA_SALES]+[UK_SALES]+[ASIA_SALES] END) as [Sunday_SUM_sales],
    USAsalesmanager,
    UKsalesmanager,
    ASIAsalesmanager
FROM 
    WORLDSALESDATA 
GROUP BY 
    GROUPING SETS(USAsalesmanager, UKsalesmanager, ASIAsalesmanager)
有没有一种简单的方法可以将此代码从一周中每天的总销售额转换为一周中每天的
MAX
?我试图使
sql查询尽量简短,如果可能的话,我不想使用多个
IF
语句。

您会使用
MAX()
,但我不确定您为什么在
中使用
,而不是
=

SELECT MAX(CASE WHEN DATEPART(weekday, [the_date]) = 2 THEN [USA_SALES]+[UK_SALES]+[ASIA_SALES] END) as [Monday_SUM_sales],
       MAX(CASE WHEN DATEPART(weekday, [the_date]) = 3 THEN [USA_SALES]+[UK_SALES]+[ASIA_SALES] END) as [Tuesday_SUM_sales],
       MAX(CASE WHEN DATEPART(weekday, [the_date]) = 4 THEN [USA_SALES]+[UK_SALES]+[ASIA_SALES] END) as [Wednesday_SUM_sales],
       MAX(CASE WHEN DATEPART(weekday, [the_date]) = 5 THEN [USA_SALES]+[UK_SALES]+[ASIA_SALES] END) as [Thursday_SUM_sales],
       MAX(CASE WHEN DATEPART(weekday, [the_date]) = 6 THEN [USA_SALES]+[UK_SALES]+[ASIA_SALES] END) as [Friday_SUM_sales],
       MAX(CASE WHEN DATEPART(weekday, [the_date]) = 7 THEN [USA_SALES]+[UK_SALES]+[ASIA_SALES] END) as [Saturday_SUM_sales],
       MAX(CASE WHEN DATEPART(weekday, [the_date]) = 1 THEN [USA_SALES]+[UK_SALES]+[ASIA_SALES] END) as [Sunday_SUM_sales],
       USAsalesmanager, UKsalesmanager, ASIAsalesmanager
FROM WORLDSALESDATA 
GROUP BY GROUPING SETS(USAsalesmanager, UKsalesmanager, ASIAsalesmanager) 
您可能会使用
MAX()
,但我不确定您为什么在
中使用
,而不是
=

SELECT MAX(CASE WHEN DATEPART(weekday, [the_date]) = 2 THEN [USA_SALES]+[UK_SALES]+[ASIA_SALES] END) as [Monday_SUM_sales],
       MAX(CASE WHEN DATEPART(weekday, [the_date]) = 3 THEN [USA_SALES]+[UK_SALES]+[ASIA_SALES] END) as [Tuesday_SUM_sales],
       MAX(CASE WHEN DATEPART(weekday, [the_date]) = 4 THEN [USA_SALES]+[UK_SALES]+[ASIA_SALES] END) as [Wednesday_SUM_sales],
       MAX(CASE WHEN DATEPART(weekday, [the_date]) = 5 THEN [USA_SALES]+[UK_SALES]+[ASIA_SALES] END) as [Thursday_SUM_sales],
       MAX(CASE WHEN DATEPART(weekday, [the_date]) = 6 THEN [USA_SALES]+[UK_SALES]+[ASIA_SALES] END) as [Friday_SUM_sales],
       MAX(CASE WHEN DATEPART(weekday, [the_date]) = 7 THEN [USA_SALES]+[UK_SALES]+[ASIA_SALES] END) as [Saturday_SUM_sales],
       MAX(CASE WHEN DATEPART(weekday, [the_date]) = 1 THEN [USA_SALES]+[UK_SALES]+[ASIA_SALES] END) as [Sunday_SUM_sales],
       USAsalesmanager, UKsalesmanager, ASIAsalesmanager
FROM WORLDSALESDATA 
GROUP BY GROUPING SETS(USAsalesmanager, UKsalesmanager, ASIAsalesmanager) 

SUM()
更改为
MAX()
?将
SUM()
更改为
MAX()
?谢谢戈登。我修改了sql查询,并没有从三个销售区域(美国销售、英国销售、亚洲销售)中获取最大值,而是获取了这些区域的销售总额,因此,如果美国销售=1、英国销售=2和亚洲销售=3,我需要获取最大值“3”,而不是总值“6”。是否可以对上面的代码进行一些小的调整,或者我必须对sql查询采用不同的方法才能获得MAX vaue?谢谢Gordon。我修改了sql查询,并没有从三个销售区域(美国销售、英国销售、亚洲销售)中获取最大值,而是获取了这些区域的销售总额,因此,如果美国销售=1、英国销售=2和亚洲销售=3,我需要获取最大值“3”,而不是总值“6”。是否可以对上述代码进行一些小的调整,或者我是否需要对sql查询采用不同的方法才能获得MAX vaue?