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,您可以对它们执行最小值或最大值,这实际上取决于您希望从这些列检索什么数据,因为您必须假设