Sql server 总结MS SQL Server查询
我有以下记录Sql server 总结MS SQL Server查询,sql-server,Sql Server,我有以下记录 Jobsite | UID | Name | Rate | Amount | Amount2 | DateProcessed | FOrigin 'X' 111 'Billy' 100 250 900 '2014-5-23' '1' 'Y' 111 'Billy' 100 350 100 '2014-5-23'
Jobsite | UID | Name | Rate | Amount | Amount2 | DateProcessed | FOrigin
'X' 111 'Billy' 100 250 900 '2014-5-23' '1'
'Y' 111 'Billy' 100 350 100 '2014-5-23' '2'
'Z' 222 'Dan' 200 200 200 '2014-5-23' '3'
'Z' 222 'Dan' 200 200 200 '2014-5-23' '4'
我将如何根据UID、名称、费率和DateProcessed进行汇总?我仍然必须为未分组的列(如Jobsite和Fileorigin)输出虚拟记录
输出应如下所示:
Jobsite | UID | Name | Rate | Amount | Amount2 | DateProcessed | FOrigin
'X' 111 'Billy' 100 600 1000 '2014-5-23' 'x'
'X' 222 'Dan' 200 400 400 '2014-5-23' 'x'
我尝试了以下查询:
select 'x' as Jobsite, UID, Name, Rate, Sum(Amount) as Amount, Sum(Amount2) as
Amount2, DateProcessed, 'x' as FOrigin from TblExample where DateProcessed = '2014-5-23'
group by UID, Name, Rate, DateProcessed;
但它仍然输出相同的记录。
我应该如何总结这一点?我应该循环访问vb.net吗
回答
关键在于要分组的字符串中的“细微差异”。名为“Ann”的员工肯定与“Anne”不同,这就是为什么他们在查询中没有分组在一起
我所做的只是删除了group by列表中的名称和费率,并在其上使用Max()。您的查询:
select 'x' as Jobsite, UID, Name, Rate, Sum(Amount) as Amount,
Sum(Amount2) as Amount2, DateProcessed, 'x' as FOrigin
from TblExample
where DateProcessed = '2014-5-23'
group by UID, Name, Rate, DateProcessed;
不应产生四列不同的行:UID
、Name
、Rate
、DateProcessed
您只显式选择了DateProcessed
的一个值,因此这不是问题所在。该问题是其他三个专栏之一。我猜,rate
是一个浮点数,实际上包含两个不同的值,输出时看起来相同。您可以尝试:
select 'x' as Jobsite, UID, Name, max(Rate), Sum(Amount) as Amount,
Sum(Amount2) as Amount2, DateProcessed, 'x' as FOrigin
from TblExample
where DateProcessed = '2014-5-23'
group by UID, Name, DateProcessed;
否则,Name
可能会有尾随空格或未打印字符,使不同的名称看起来不同。或者UID可能有细微的差异。您的查询:
select 'x' as Jobsite, UID, Name, Rate, Sum(Amount) as Amount,
Sum(Amount2) as Amount2, DateProcessed, 'x' as FOrigin
from TblExample
where DateProcessed = '2014-5-23'
group by UID, Name, Rate, DateProcessed;
不应产生四列不同的行:UID
、Name
、Rate
、DateProcessed
您只显式选择了DateProcessed
的一个值,因此这不是问题所在。该问题是其他三个专栏之一。我猜,rate
是一个浮点数,实际上包含两个不同的值,输出时看起来相同。您可以尝试:
select 'x' as Jobsite, UID, Name, max(Rate), Sum(Amount) as Amount,
Sum(Amount2) as Amount2, DateProcessed, 'x' as FOrigin
from TblExample
where DateProcessed = '2014-5-23'
group by UID, Name, DateProcessed;
否则,Name
可能会有尾随空格或未打印字符,使不同的名称看起来不同。或者UID可能有细微的差异。您的查询:
select 'x' as Jobsite, UID, Name, Rate, Sum(Amount) as Amount,
Sum(Amount2) as Amount2, DateProcessed, 'x' as FOrigin
from TblExample
where DateProcessed = '2014-5-23'
group by UID, Name, Rate, DateProcessed;
不应产生四列不同的行:UID
、Name
、Rate
、DateProcessed
您只显式选择了DateProcessed
的一个值,因此这不是问题所在。该问题是其他三个专栏之一。我猜,rate
是一个浮点数,实际上包含两个不同的值,输出时看起来相同。您可以尝试:
select 'x' as Jobsite, UID, Name, max(Rate), Sum(Amount) as Amount,
Sum(Amount2) as Amount2, DateProcessed, 'x' as FOrigin
from TblExample
where DateProcessed = '2014-5-23'
group by UID, Name, DateProcessed;
否则,Name
可能会有尾随空格或未打印字符,使不同的名称看起来不同。或者UID可能有细微的差异。您的查询:
select 'x' as Jobsite, UID, Name, Rate, Sum(Amount) as Amount,
Sum(Amount2) as Amount2, DateProcessed, 'x' as FOrigin
from TblExample
where DateProcessed = '2014-5-23'
group by UID, Name, Rate, DateProcessed;
不应产生四列不同的行:UID
、Name
、Rate
、DateProcessed
您只显式选择了DateProcessed
的一个值,因此这不是问题所在。该问题是其他三个专栏之一。我猜,rate
是一个浮点数,实际上包含两个不同的值,输出时看起来相同。您可以尝试:
select 'x' as Jobsite, UID, Name, max(Rate), Sum(Amount) as Amount,
Sum(Amount2) as Amount2, DateProcessed, 'x' as FOrigin
from TblExample
where DateProcessed = '2014-5-23'
group by UID, Name, DateProcessed;
否则,
Name
可能会有尾随空格或未打印字符,使不同的名称看起来不同。或者UID可能有细微的差别。如果我要解释您的问题,那么您要求能够按UID分组,但仍然能够输出其他每一列。
在这种情况下,您必须对UID执行GROUPBY,并对每列执行某种聚合函数
现在,有一些简单的方法,比如Rate、Amount和Amount2,在这些方法中,您需要对这些列求和(聚合)
对于其他列,如DateProcessed和FOrigin,您可以对它们执行最小值或最大值,这实际上取决于您希望从这些列中检索什么数据,因为您必须假设您已将两行或更多行折叠在一起
然后,它在Jobsite和Name等列上变得更加有趣。您可以使用第一行的值,但是谁能说作业站点“X”比作业站点“Y”更重要呢。另一种选择是连接它们。因此,如果前两行折叠为一行,则作业站点列可能为“X,Y”。您可以使用用户定义的函数完成连接。如果我要解释您的问题,那么您要求能够按UID分组,但仍然能够输出其他每一列。 在这种情况下,您必须对UID执行GROUPBY,并对每列执行某种聚合函数 现在,有一些简单的方法,比如Rate、Amount和Amount2,在这些方法中,您需要对这些列求和(聚合) 对于其他列,如DateProcessed和FOrigin,您可以对它们执行最小值或最大值,这实际上取决于您希望从这些列中检索什么数据,因为您必须假设您已将两行或更多行折叠在一起
然后,它在Jobsite和Name等列上变得更加有趣。您可以使用第一行的值,但是谁能说作业站点“X”比作业站点“Y”更重要呢。另一种选择是连接它们。因此,如果前两行折叠为一行,则作业站点列可能为“X,Y”。您可以使用用户定义的函数完成连接。如果我要解释您的问题,那么您要求能够按UID分组,但仍然能够输出其他每一列。 在这种情况下,您必须对UID执行GROUPBY,并对每列执行某种聚合函数 现在,有一些简单的方法,比如Rate、Amount和Amount2,在这些方法中,您需要对这些列求和(聚合) 对于其他列,如DateProcessed和FOrigin,您可以对它们执行最小值或最大值,这实际上取决于您希望从这些列检索什么数据,因为您必须假设