Sql server 将代码从多个字段中获取平均值转换为从多个字段中获取最大值的简单方法
我使用以下sql获取三个地区一周中每天的总销售额: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
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?