如何根据存在于不同行中的另一列中的特定值来获取列值的总和

时间:2014-09-29 10:33:58

标签: sql sql-server

这是数据详情

 ID    NAME    STRVALUE INTVALUE
 1     d_n     d1         (null)
 2     d_n     d1         (null)
 3     d_n     d1         (null)
 3     u_n     u1         (null)
 3     s_l     4          4
 3     p_n     A          (null)
 4     d_n     d2         (null)
 5     d_n     d2         (null)
 6     d_n     d2         (null)
 6     u_n     u2         (null)
 6     s_l     5          5
 6     p_n     A          (null)
 7     d_n     d1         (null)
 8     d_n     d1         (null)
 9     d_n     d1         (null)
 9     u_n     u1         (null)
 9     s_l     5          5
 9     p_n     A          (null)
 10    d_n     d1         (null)

在我的数据中,对于每个ID,我有多行。每一行都有name,strvalue和intvalue。

有人可以帮助我以下列格式获取输出吗?

STRVALUE    INTVALUE_SUM
 d1          9
 d2          5

查询

SELECT 
  strvalue,
  SUM(intvalue) AS `Sum`
FROM
  d 
WHERE id IN 
  (SELECT 
    id 
  FROM
    e 
  WHERE TYPE = 'a_e' 
    AND USER = 1) 
GROUP BY id 

1 个答案:

答案 0 :(得分:0)

创建测试数据:

DECLARE @Test TABLE
(
    ID INT,
    NAME VARCHAR(10),
    STRVALUE VARCHAR(10),
    INTVALUE INT NULL
)

INSERT INTO @Test
(ID, NAME, STRVALUE, INTVALUE)
VALUES
(1,     'd_n',     'd1',         NULL),
(2,     'd_n',     'd1',         null),
(3,     'd_n',     'd1',         null),
(3,     'u_n',     'u1',         null),
(3,     's_l',     '4',          4),
(3,     'p_n',     'A',          null),
(4,     'd_n',     'd2',         null),
(5,     'd_n',     'd2',         null),
(6,     'd_n',     'd2',         null),
(6,     'u_n',     'u2',         null),
(6,     's_l',     '5',          5),
(6,     'p_n',     'A',          null),
(7,     'd_n',     'd1',         null),
(8,     'd_n',     'd1',         null),
(9,     'd_n',     'd1',         null),
(9,     'u_n',     'u1',         null),
(9,     's_l',     '5',          5),
(9,     'p_n',     'A',          null),
(10,    'd_n',     'd1',         null);

从您期望的答案中,我猜您正在寻找与d_n匹配的s_l行并尝试获取这些值,这是查询。

SELECT d1.STRVALUE, SUM(d2.INTVALUE) AS INTVALUE_SUM FROM @Test d1
INNER JOIN @Test d2
    ON d1.ID = d2.ID
    AND d1.NAME = 'd_n'
    AND d2.NAME = 's_l'
GROUP BY D1.STRVALUE

这是输出:

STRVALUE    INTVALUE_SUM
d1  9
d2  5

现在只需修复查询,根据您发布的其他子查询提取正确的ID,就可以获得计数。