1

テーブルTab ( id,, DeptName, Total, ...) があるとします。

には 4 つの可能な値がありDeptnameますDept1, Dept2, Dept3, Dept4

次に、次のようにグループ化のために SQL を発行できます。

Select DeptName, Totaol = Sum(total) 
from Tab 
group by DeptName

通常、結果は の値に基づいて 4 行になりますDeptName

DeptName Total
Dept1    1234.09
Dept2    234.80
Dept3    34.34
Dept4    614.48

のデータがない場合Dept2、結果は 3 行のみになります。

Dept1    1234.09
Dept3    34.34
Dept4    614.48

私が欲しいのは、結果が常に4行になることです。のデータがない場合Dept2、次のような結果が必要です。

Dept1    1234.09
Dept2    0
Dept3    34.34
Dept4    614.48

このリクエストを実装するには?

4

3 に答える 3

1

これは正しいSQL Fiddleのようです:

SELECT t2.DeptName, Total = COALESCE(Sum(total),0)
FROM Tab t1
RIGHT OUTER JOIN (SELECT 'Dept1' as DeptName UNION ALL
                  SELECT 'Dept2' UNION ALL
                  SELECT 'Dept3' UNION ALL
                  SELECT 'Dept4') t2 ON t2.DeptName = t1.DeptName
GROUP BY t2.DeptName
于 2012-07-23T20:18:12.343 に答える
0

これを試して:

select b.DeptName,b.Total from(
select 'Dept1' as Dept union all
select 'Dept2' as Dept union all
select 'Dept3' as Dept union all
select 'Dept4' as Dept )a left outer join
(
Select DeptName, case when b.DeptName IS null then 0 else SUM(total) end as Total
from Tab 
group by DeptName)b
on b.DeptName=a.Dept
于 2012-07-23T14:38:29.707 に答える
0

「union all」を使用して、各行を複数の行に分割します。

select dept, sum(val) as sumval
from ((select 'dept1' as dept, t.dept1 as val from tab t) union all
      (select 'dept2', t.dept2 as val from tab t) union all
      (select 'dept3', t.dept3 as val from tab t) union all
      (select 'dept4', t.dept4 as val from tab t)
     ) t
group by dept
order by 1

大量のデータがある場合は、次の方法が少し効率的かもしれません。

      (select 'dept1' as dept, sum(t.dept1) as val from tab t) union all
      (select 'dept2', sum(t.dept2) as val from tab t) union all
      (select 'dept3', sum(t.dept3) as val from tab t) union all
      (select 'dept4', sum(t.dept4) as val from tab t)
于 2012-07-23T14:51:49.767 に答える