如何结合两个选择与不同的where子句?

时间:2013-01-08 01:51:10

标签: sql sql-server database

select kota ,total, totalsum from 
(
SELECT  i.[Antam_Unit] as kota ,count(p.[Id_Pks_Pk])as total FROM [SIMPKBL].[dbo].[Pks_Pk] p join [SIMPKBL].[dbo].[Par_Unit_Antam] i on  i.Id_Unit_Antam = p.Id_Unit_Antam  group by i.[Id_Unit_Antam],i.Antam_Unit
UNION ALL
SELECT  i.[Antam_Unit] as kota , count(p.[Id_Proposal_Pk])as totalsum  FROM [SIMPKBL].[dbo].[Pks_Pk] p join [SIMPKBL].[dbo].[Par_Unit_Antam] i on  i.Id_Unit_Antam = p.Id_Unit_Antam where YEAR(p.Tanggal_Cetak_Pks_Pk) = '2012'   group by i.[Id_Unit_Antam],i.Antam_Unit 
) t
group by kota,total

我想要这样的输出:

kota total totalsum
A     12      4
B     16      5

2 个答案:

答案 0 :(得分:0)

由于查询非常相似,因此可以将它们合并为一个select

select i.[Antam_Unit] as kota,
  count(p.[Id_Pks_Pk]) as total,
  count( case when YEAR(p.Tanggal_Cetak_Pks_Pk) = '2012' then p.[Id_Proposal_Pk] else null end ) as totalsum
  FROM [SIMPKBL].[dbo].[Pks_Pk] p join [SIMPKBL].[dbo].[Par_Unit_Antam] i on  i.Id_Unit_Antam = p.Id_Unit_Antam
  group by i.[Id_Unit_Antam], i.Antam_Unit

答案 1 :(得分:0)

如果我正确理解了你的要求,你可以用这个简单的陈述来实现你想要的结果:

SELECT  i.[Antam_Unit] as kota, 
count(p.[Id_Pks_Pk]) as total,
SUM(CASE WHEN YEAR(p.Tanggal_Cetak_Pks_Pk) = '2012' AND p.[Id_Proposal_Pk] IS NOT NULL THEN 1 ELSE 0 END) as totalsum  
FROM [SIMPKBL].[dbo].[Pks_Pk] p 
 join [SIMPKBL].[dbo].[Par_Unit_Antam] i 
 on  i.Id_Unit_Antam = p.Id_Unit_Antam 
group by i.[Id_Unit_Antam],i.Antam_Unit