从我之前的问题开始,我已经设法使用Microsoft SQL Server将excel文件导入新数据库。现在,我的问题是处理编写正确的sql命令。我试图使用不同的标准两次总结表的相同列,然后将这些数字输入到不同的表。我知道如何向表中插入一个总和,但我想知道如何同时插入两个来自同一列的总和(因为每次插入时,都会创建一个新行)到表的同一行。
其他问题:我应该如何组织我的结果取决于第三张表中的值?样本数据如下。
一些示例数据:
DeptID Department
15 Eng
16 Eng
17 Mkt
18 Mkt
| Person | DeptID | Type | Number |
+--------+------------+------+---------+
| A | 15 | p1 | 1 |
| B | 18 | p2 | 5 |
| C | 16 | p2 | 10 |
| D | 17 | p1 | 7 |
| E | 18 | p1 | 11 |
| F | 16 | p2 | 12 |
所以我应该给出的结果是:
| Department | Sum of p1 | Sum of p2 |
+------------+------------+-----------+
| Eng | 1 | 22 |
| Mkt | 18 | 5 |
我尝试的内容如下:
select sum(Amount) as engsump1 from Sheet1$
where Department = 'Eng' and Type = 'p1'
select sum(Amount) as engsump2 from Sheet1$
where Department = 'Eng' and Type = 'p2'
select sum(Amount) as mktsump1 from Sheet1$
where Department = 'Mkt' and Type = 'p1'
select sum(Amount) as mktsump2 from Sheet1$
where Department = 'Mkt' and Type = 'p2'
运行一次,在看到结果后,执行插入功能。我只是想知道我是否可以一步完成这两步。
答案 0 :(得分:1)
要对每个组中的“数字”列求和,可以使用SUM()函数;只需在其中放置一个case语句,这样就可以在类型为p1时对案例进行求和,并在类型为p2时求和。
要分隔部门,只需使用GROUP BY子句。试试这个:
SELECT department,
SUM(CASE WHEN type = 'p1' THEN number ELSE 0 END) AS totalP1,
SUM(CASE WHEN type = 'p2' THEN number ELSE 0 END) AS totalP2
FROM myTable
GROUP BY department;
以下是SQL Fiddle示例。