1

こんにちは私はSQL出力として以下を持っています。

TYPE SUM(UPDATE_COUNT) 
Legis 93 
Acds 43 
Updates 41 
Multibases 345 

しかし、更新を更新とマルチベースの合計として表示したいのですが、ここではマルチベースと更新の両方が同じ列に属しています。以下のようになります。

Updates 386

最初の出力に使用したクエリは

SELECT type, SUM(Update_Count) 
FROM Scope1 
where type in ('Updates','Multibases','DAIS','Acds','Legis','LegAll') and 
      (RECVD_DATE >='04/02/2012' and RECVD_DATE <='11/30/2012') 
group by type

2番目の出力を取得する方法を教えてください。

4

4 に答える 4

3
SELECT
  CASE WHEN type IN 'Updates','Multibases' THEN 'Updates' ELSE type END as TYPE,
  SUM(Update_Count) 
FROM
  Scope1 
WHERE
      type in ('Updates','Multibases','DAIS','Acds','Legis','LegAll')
  and (RECVD_DATE >='04/02/2012' and RECVD_DATE <='11/30/2012') 
GROUP BY
  CASE WHEN type IN 'Updates','Multibases' THEN 'Updates' ELSE type END

よりスケーラブルな解決策は、 にマップtypeする別のテーブルを用意することsuper_typeです。

SELECT
  map.super_type,
  SUM(Scope1.update_count)
FROM
  Scope1
INNER JOIN
  map
    ON map.type = Scope1.type
WHERE
      Scope1.type in ('Updates','Multibases','DAIS','Acds','Legis','LegAll')
  and Scope1.RECVD_DATE >='04/02/2012'
  and Scope1.RECVD_DATE <='11/30/2012'
GROUP BY
  map.super_type

次に、次のようなエントリをマップに配置できます...

 type       | super_type
------------+------------
 Legis      | Legis
 Acds       | Acds
 Updates    | Updates
 Multibases | Updates

などなど

于 2012-11-01T11:44:27.790 に答える
2

これが1回限りの場合は、他のソリューションの1つを使用してください。将来、グループ化を変更する可能性がある場合のデータ主導のアイデアは次のとおりです。

Create Table TypeBucket (
  type varchar(50) not null primary key, 
  bucket varchar(50) not null
);

Insert Into TypeBucket (type, bucket) values 
  ('Legis', 'Legis'),
  ('Acds', 'Acds'),
  ('Updates', 'Updates'),
  ('Multibases', 'Updates'),
  ('LegAll', 'LegAll'),
  ('DAIS', 'DAIS');

Select
  b.bucket,
  Sum(s.update_count)
From
  Scope1 s
    Inner Join
  TypeBucket b
    On s.type = b.Type
Where
  s.type in ('Updates', 'Multibases', 'DAIS', 'Acds', 'Legis', 'LegAll') And
  s.recvd_date >= '04/02/2012' And 
  s.recvd_date < '12/1/2012'
Group By
  b.bucket
于 2012-11-01T11:51:18.243 に答える
2
SELECT type, SUM(case when type in ('Updates','Multibases') then Update_Count else o end) as  Update_Count 
FROM Scope1 
where type in ('Updates','Multibases','DAIS','Acds','Legis','LegAll') and 
      (RECVD_DATE >='04/02/2012' and RECVD_DATE <='11/30/2012') 
group by type
于 2012-11-01T11:44:50.650 に答える
1
SELECT type, SUM(Update_Count) 
FROM Scope1 
where type in ('DAIS','Acds','Legis','LegAll') and 
      (RECVD_DATE >='04/02/2012' and RECVD_DATE <='11/30/2012') 
group by type
UNION ALL
SELECT 'Updates' AS type, SUM(Update_Count) 
FROM Scope1 
where type in ('Updates','Multibases') and 
      (RECVD_DATE >='04/02/2012' and RECVD_DATE <='11/30/2012') 

以下を生成します。

TYPE SUM(UPDATE_COUNT)
レジ 93
アクズ 43
アップデート 386

または、 a を使用しCASEて同じ出力を生成することもできます。

SELECT CASE WHEN type IN ('Updates','Multibases') THEN 'Updates' ELSE type END AS type, SUM(Update_Count) 
FROM Scope1 
where type in ('Updates','Multibases','DAIS','Acds','Legis','LegAll') and 
      (RECVD_DATE >='04/02/2012' and RECVD_DATE <='11/30/2012') 
group by CASE WHEN type IN ('Updates','Multibases') THEN 'Updates' ELSE type END
于 2012-11-01T11:44:17.463 に答える