Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL对多个列求和,并基于一列中的多个值进行匹配_Sql - Fatal编程技术网

SQL对多个列求和,并基于一列中的多个值进行匹配

SQL对多个列求和,并基于一列中的多个值进行匹配,sql,Sql,我需要帮助添加到我的SQL语句。所有数据都位于同一个表中。我目前的代码如下: SELECT Date, Val2, SNumber, SUM(isnull(L1,0) + isnull(L2,0) + isnull(L3,0)) As TotalR, From Table1 Where Val2='Rep' Group By Date Val2 Snumber TotalR TotalS x Rep1 1 8 20

我需要帮助添加到我的SQL语句。所有数据都位于同一个表中。我目前的代码如下:

SELECT Date,
       Val2,
       SNumber,
       SUM(isnull(L1,0) + isnull(L2,0) + isnull(L3,0)) As TotalR,
From Table1
Where Val2='Rep'
Group By 
Date    Val2    Snumber TotalR  TotalS  
x   Rep1    1   8   20  
x   Rep2    1   12  20  
x   Rep3    2   8   24  
x   Rep4    2   9   24  
x   Rep5    2   7   24  
值2同时具有Store和Rep

Date    Val2    Snumber TotalR  TotalS  
x   Rep1    1   8   20  
x   Rep2    1   12  20  
x   Rep3    2   8   24  
x   Rep4    2   9   24  
x   Rep5    2   7   24  
我的L1、L2和L3的总数对销售代表来说非常好。 我需要帮助的是如何获得

Date    Val2    Snumber TotalR  TotalS  
x   Rep1    1   8   20  
x   Rep2    1   12  20  
x   Rep3    2   8   24  
x   Rep4    2   9   24  
x   Rep5    2   7   24  
存储L1、L2和L3的总计,其中 SNumber匹配Rep和Store

Date    Val2    Snumber TotalR  TotalS  
x   Rep1    1   8   20  
x   Rep2    1   12  20  
x   Rep3    2   8   24  
x   Rep4    2   9   24  
x   Rep5    2   7   24  
有些销售代表在同一家商店,总数应该相同

Source Table                    
Date    Val2    Snumber L1  L2  L3
x   Store   1   11  5   4
x   Store   2   6   8   10
x   Rep1    1   5   2   1
x   Rep2    1   6   3   3
x   Rep3    2   2   1   5
x   Rep4    2   3   3   3
x   Rep5    2   1   4   2
Date    Val2    Snumber TotalR  TotalS  
x   Rep1    1   8   20  
x   Rep2    1   12  20  
x   Rep3    2   8   24  
x   Rep4    2   9   24  
x   Rep5    2   7   24  
结果

Date    Val2    Snumber TotalR  TotalS  
x   Rep1    1   8   20  
x   Rep2    1   12  20  
x   Rep3    2   8   24  
x   Rep4    2   9   24  
x   Rep5    2   7   24  

您需要对同一表Table1的子查询使用内部联接

Date    Val2    Snumber TotalR  TotalS  
x   Rep1    1   8   20  
x   Rep2    1   12  20  
x   Rep3    2   8   24  
x   Rep4    2   9   24  
x   Rep5    2   7   24  
在下面,我准备了用于创建和插入您指定的示例数据的脚本:

Date    Val2    Snumber TotalR  TotalS  
x   Rep1    1   8   20  
x   Rep2    1   12  20  
x   Rep3    2   8   24  
x   Rep4    2   9   24  
x   Rep5    2   7   24  
CREATE TABLE Table1 (
    Date DateTime,
    Val2 Varchar(5),
    SNumber Smallint,
    L1 Smallint,
    L2 Smallint,
    L3 Smallint
)
运行此插入脚本在表上创建数据

Date    Val2    Snumber TotalR  TotalS  
x   Rep1    1   8   20  
x   Rep2    1   12  20  
x   Rep3    2   8   24  
x   Rep4    2   9   24  
x   Rep5    2   7   24  
INSERT INTO Table1
VALUES(CAST(GETDATE() AS DATE), 'Store', 1, 11, 5, 4),
(CAST(GETDATE() AS DATE), 'Store', 2, 6, 8, 10),
(CAST(GETDATE() AS DATE), 'Rep1', 1, 5, 2, 1),
(CAST(GETDATE() AS DATE), 'Rep2', 1, 6, 3, 3),
(CAST(GETDATE() AS DATE), 'Rep3', 2, 2, 1, 5),
(CAST(GETDATE() AS DATE), 'Rep4', 2, 3, 3, 3),
(CAST(GETDATE() AS DATE), 'Rep5', 2, 1, 4, 2)
在创建的表上,如果运行以下脚本,将获得预期结果:

Date    Val2    Snumber TotalR  TotalS  
x   Rep1    1   8   20  
x   Rep2    1   12  20  
x   Rep3    2   8   24  
x   Rep4    2   9   24  
x   Rep5    2   7   24  
SELECT Date, Val2, Table1.SNumber, (L1 + L2 + L3) AS TotalR, S.TotalS
FROM Table1(NOLOCK)
  JOIN (
      SELECT SNumber, L1 + L2 + L3 AS TotalS
      FROM Table1(NOLOCK)
      WHERE Val2 = 'Store'
   ) S
   ON Table1.SNumber = S.SNumber
 WHERE Val2 <> 'Store'
试穿

Date    Val2    Snumber TotalR  TotalS  
x   Rep1    1   8   20  
x   Rep2    1   12  20  
x   Rep3    2   8   24  
x   Rep4    2   9   24  
x   Rep5    2   7   24  
补充: 下面的脚本列出了商店的回购协议以及最大总额:

Date    Val2    Snumber TotalR  TotalS  
x   Rep1    1   8   20  
x   Rep2    1   12  20  
x   Rep3    2   8   24  
x   Rep4    2   9   24  
x   Rep5    2   7   24  
SELECT Date, Val2, Table1.SNumber, (L1 + L2 + L3) AS TotalR, S.TotalS
FROM Table1(NOLOCK)
  JOIN (
      SELECT TOP 1 SNumber, L1 + L2 + L3 AS TotalS
      FROM Table1(NOLOCK)
      WHERE Val2 = 'Store'
      ORDER BY TotalS DESC
   ) S
   ON Table1.SNumber = S.SNumber
 WHERE Val2 <> 'Store'

令人惊叹的勇敢地朝着正确的方向迈出了一步。关于删除重复条目有什么建议吗?我得到了两条总计条目。两者中较高的值是正确的数量。我需要删除金额较低的行。用加法编辑了我的答案,请检查上述解决方案。这就是你想要实现的吗?代码看起来会给我结果!明天我得试试!也许这是一个单独的问题,但最终的结果是将TotalR除以TotalS得到一个贡献%。我不能给你足够的支持!你用哪一种?博士后?神谕