SQL Server中多个列上的聚合函数

尼罗什·加亚尔(Nilesh Gajare)

我在#temp表中具有以下数据:

Id  code       Fname       CompanyId    FieldName         Value
----------------------------------------------------------------
465 00133   JENN WILSON       1           ERA              1573
465 00133   JENN WILSON       1           ESHIFTALLOW      3658
465 00133   JENN WILSON       1           NETPAY          51560

我想做以下操作,即

一行将在两列上加法,即ERA + ESHIFTALLOW另一行将在三列上减法加法,即NETPAY - ERA + ESHIFTALLOW我曾尝试在SQL Server中使用case语句。

以下是所需的输出

哪里Field1= ERA + ESHIFTALLOWFiled2=NETPAY - ERA + ESHIFTALLOW

Id  code       Fname       CompanyId    FieldName         Value
----------------------------------------------------------------
465 00133   JENN WILSON       1           Field1          5231
465 00133   JENN WILSON       1           Filed2          46329

我曾尝试使用SQL SERVER Case语句,但未获得正确的输出SQL Server CASE语句中的SQL Query:Aggregate选项

暴风雨

我看到至少有两种方法可以得到这些结果。分组或枢纽

在下面的示例中,显示了2种方法。

CREATE TABLE #Temp (Id INT, code VARCHAR(5), Fname VARCHAR(20), CompanyId INT, FieldName VARCHAR(20), Value INT);

insert into #Temp (Id, code, Fname, CompanyId, FieldName, Value)
values 
(465,00133,'JENN WILSON',1,'ERA',1573),
(465,00133,'JENN WILSON',1,'ESHIFTALLOW',3658),
(465,00133,'JENN WILSON',1,'NETPAY',51560);

with Q AS (
  SELECT Id, code, Fname, CompanyId, 
  sum(case when FieldName = 'ERA' then Value end) as ERA,
  sum(case when FieldName = 'ESHIFTALLOW' then Value end) as ESHIFTALLOW,
  sum(case when FieldName = 'NETPAY' then Value end) as NETPAY
  from #Temp
  group by Id, code, Fname, CompanyId
)
select Id, code, Fname, CompanyId, 'Field1' as FieldName, (ERA +  ESHIFTALLOW) as Value from Q
union all
select Id, code, Fname, CompanyId, 'Field2', (NETPAY - ERA +  ESHIFTALLOW) from Q
;

with Q AS (
  SELECT Id, code, Fname, CompanyId, 
  (ERA +  ESHIFTALLOW) as Field1,
  (NETPAY - ERA +  ESHIFTALLOW) as Field2
  FROM (SELECT * FROM #Temp) s
  PIVOT ( SUM(VALUE) FOR FieldName IN (ERA, ESHIFTALLOW, NETPAY)) p
)
select Id, code, Fname, CompanyId, 'Field1' as FieldName, Field1 as Value from Q
union all
select Id, code, Fname, CompanyId, 'Field2', Field2 from Q
;

请注意,使用的是SUM(VALUE)而不是MAX(VALUE)。在这种情况下,它将产生相同的结果。这只是一个选择。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在一个选择查询中计算多个聚合函数时,SQL Server如何遍历行

来自分类Dev

SQL聚合函数失败

来自分类Dev

将SQL聚合函数与多个联接一起使用

来自分类Dev

使用SQL Server 2008 R2在数据透视表查询中的聚合函数

来自分类Dev

SQL Server多个联接与聚合

来自分类Dev

递归SQL中的聚合函数

来自分类Dev

从Apache Spark SQL中的用户定义的聚合函数(UDAF)返回多个数组

来自分类Dev

SQL:多个嵌套的聚合函数

来自分类Dev

在SQL Server中的多个列上使用Pivot

来自分类Dev

SQL Server:枢纽多个聚合

来自分类Dev

SQL Server中多个列上的聚合函数

来自分类Dev

PySpark SQL中的用户定义的聚合函数

来自分类Dev

SQL连接与聚合函数

来自分类Dev

在SQL Server中对聚合执行“任何”的方法

来自分类Dev

SQL Server中的MAX聚合函数

来自分类Dev

多个列上的SQL Server数据透视表

来自分类Dev

在一个选择查询中计算多个聚合函数时,SQL Server如何在行上进行迭代

来自分类Dev

sql server,表中许多列上的聚合(计数)

来自分类Dev

SQL聚合函数中的动态选择

来自分类Dev

SQL Server:枢纽多个聚合

来自分类Dev

在SQL Server中的两列上联接

来自分类Dev

没有聚合的SQL Server中的UNPIVOT

来自分类Dev

SQL Server在多个列上进行数据透视

来自分类Dev

Oracle Sql中的多个联合,特定列上没有重复

来自分类Dev

SQL Server中多个列上的内部联接

来自分类Dev

在 SQL 中的多个列上查找重复项

来自分类Dev

SQL Server 2014 中的聚合

来自分类Dev

Spark DataFrame:多列上的多个聚合函数

来自分类Dev

Microsoft SQL Server 中 Year 和 Quarter 的聚合函数