SQL Server中具有条件的多重计数函数

库尼亚万塔里(Kurniawantaari)

我想在SQL Server中合并一些表。我想要获得的是下图所示的内容。假设我有tes_A,tes_B,tes_C和tes_jumlah表。tes_jumlah是tes_A,tes_B和tes_C表的组合。请注意jumlahA,jumlahB和jumlahC是通过对另一个表中的行数进行计数而获得的。

如何使tes_jumlah表中的结果如图所示?

在这里,我包括从中获取jumlahA,jumlahB和jumlahC的代码。

delete sbr.dbo.tes_A
--entry
insert into sbr.dbo.tes_A
select kddesa,kdkec,kdkab,kdprop, COUNT(DISTINCT idestablishment) as jumlahA
    FROM [db-sbr-20130724T193906220SS].dbo.commonthesis_es
    where tahunberdiri = 2013
    group by kddesa,kdkec,kdkab,kdprop
--exit
delete sbr.dbo.tes_B
insert into sbr.dbo.tes_B
select y.kddesa,y.kdkec,y.kdkab,y.kdprop, COUNT(DISTINCT y.idestablishment) as jumlahB
FROM  [db-sbr-20120724T193741793SS].dbo.commonthesis_es as y
INNER JOIN [db-sbr-20130724T193906220SS].dbo.commonthesis_es as y1
        ON y1.idestablishment = y.idestablishment
--join [db-sbr-20120724T193741793SS].dbo.m_desa as d on     d.kddesa=y1.kddesa and d.kddesa=y.kddesa
where y.statusperusahaan=1 and y1.statusperusahaan=4
group by y.kddesa,y.kdkec,y.kdkab,y.kdprop
--jumlah akhir tahun
delete sbr.dbo.tes_C
insert into sbr.dbo.tes_C
Select kddesa,kdkec,kdkab,kdprop,count (distinct idestablishment) as jumlahC
from [db-sbr-20130724T193906220SS].dbo.commonthesis_es where statusperusahaan=2
or statusperusahaan=3  or statusperusahaan=5
group by kddesa,kdkec,kdkab,kdprop

这是表脚本和示例数据:

USE [SBR]
GO
/****** Object:  Table [dbo].[tes_A]    Script Date: 24/07/2016 22.22.41 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[tes_A](
[kddesa] [nchar](3) NULL,
[kdkec] [nchar](3) NULL,
[kdkab] [nchar](2) NULL,
[kdprop] [nchar](2) NULL,
[jumlahA] [bigint] NULL
) ON [PRIMARY]

GO
/****** Object:  Table [dbo].[tes_B]    Script Date: 24/07/2016 22.22.41 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[tes_B](
[kddesa] [nchar](3) NULL,
[kdkec] [nchar](3) NULL,
[kdkab] [nchar](2) NULL,
[kdprop] [nchar](2) NULL,
[jumlahB] [bigint] NULL
) ON [PRIMARY]

GO
/****** Object:  Table [dbo].[tes_C]    Script Date: 24/07/2016 22.22.41 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[tes_C](
[kddesa] [nchar](3) NULL,
[kdkec] [nchar](3) NULL,
[kdkab] [nchar](2) NULL,
[kdprop] [nchar](2) NULL,
[jumlahC] [bigint] NULL
) ON [PRIMARY]

 GO
 INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (NULL, NULL, N'71', N'73', 1)
GO
INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (NULL, N'020', N'72', N'21', 1)
GO
INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (NULL, N'061', N'06', N'73', 1)
GO
INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'   ', N'   ', N'02', N'73', 112)
GO
INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'   ', N'   ', N'03', N'73', 28)
GO
INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'   ', N'   ', N'04', N'73', 55)
 GO
 INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'   ', N'   ', N'09', N'73', 6)
GO
INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'   ', N'   ', N'10', N'73', 18)
GO
INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'   ', N'   ', N'13', N'73', 7)
 GO
 INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'   ', N'   ', N'14', N'73', 7)
 GO
 INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'   ', N'   ', N'22', N'73', 4)
 GO
 INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'   ', N'   ', N'73', N'73', 1)
 GO
 INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'   ', N'020', N'13', N'73', 1)
 GO
 INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'   ', N'020', N'73', N'73', 1)
 GO
 INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'   ', N'030', N'09', N'73', 1)
 GO
 INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'   ', N'040', N'22', N'73', 1)
 GO
 INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'   ', N'050', N'04', N'73', 2)
 GO
 INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'   ', N'060', N'09', N'73', 1)
 GO
 INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'001', N'010', N'03', N'73', 1)
 GO
 INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'001', N'020', N'03', N'73', 1)
 GO
 INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'001', N'030', N'10', N'73', 3)
 GO
 INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'001', N'040', N'14', N'73', 1)
GO
 INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'001', N'061', N'02', N'21', 1)
GO
INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'001', N'070', N'14', N'73', 1)
GO
INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'002', N'010', N'02', N'73', 1)
GO
INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'002', N'020', N'03', N'73', 1)
GO
INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'002', N'020', N'10', N'73', 1)
GO
INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'002', N'030', N'10', N'73', 1)
GO
INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'002', N'051', N'09', N'73', 1)
GO
INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'002', N'080', N'02', N'73', 1)
GO
INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'003', N'   ', N'02', N'73', 1)
GO
INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'003', N'030', N'10', N'73', 2)
GO
INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'003', N'031', N'04', N'73', 1)
GO
INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'003', N'060', N'14', N'73', 1)
GO
INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'004', N'011', N'10', N'73', 1)
GO
INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'004', N'020', N'02', N'73', 1)
GO
INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'004', N'021', N'16', N'73', 1)
GO
INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'004', N'030', N'04', N'73', 1)
GO
 INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'004', N'050', N'10', N'73', 3)
GO
INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'005', N'010', N'14', N'73', 3)
GO
INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'005', N'020', N'10', N'73', 3)
GO
INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'005', N'050', N'10', N'73', 1)
 GO
INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'005', N'051', N'16', N'73', 1)
 GO
 INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'006', N'030', N'04', N'73', 2)
GO
INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'006', N'040', N'14', N'73', 1)
GO
INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'006', N'070', N'14', N'73', 1)
GO
INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'007', N'010', N'14', N'73', 1)
GO
INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'007', N'030', N'04', N'73', 1)
GO
INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'007', N'040', N'14', N'73', 1)
GO
INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'007', N'041', N'09', N'73', 2)
GO
INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'007', N'050', N'10', N'73', 1)
GO
INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'007', N'060', N'14', N'73', 1)
GO
INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'008', N'040', N'14', N'73', 1)
GO
INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'008', N'050', N'14', N'73', 4)
GO
INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'009', N'010', N'02', N'73', 1)
GO
INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'009', N'030', N'10', N'73', 1)
 GO
 INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'009', N'031', N'03', N'73', 1)
 GO
 INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'009', N'041', N'16', N'73', 1)
GO
INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'009', N'060', N'14', N'73', 1)
GO
INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'010', N'010', N'14', N'73', 1)
GO
INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'011', N'011', N'03', N'73', 1)
GO
INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'013', N'030', N'04', N'73', 1)
 GO
 INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'016', N'070', N'05', N'21', 1)
GO
INSERT [dbo].[tes_B] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahB]) VALUES (N'017', N'040', N'09', N'73', 1)
GO
INSERT [dbo].[tes_C] ([kddesa], [kdkec], [kdkab], [kdprop], [jumlahC]) VALUES (N'   ', N'   ', N'02', N'73', 1)
GO

脚本表的test_number:

USE [SBR]
GO
/****** Object:  Table [dbo].[tes_jumlah]    Script Date: 24/07/2016 22.41.50 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[tes_jumlah](
[kddesa] [nchar](3) NULL,
[kdkec] [nchar](3) NULL,
[kdkab] [nchar](2) NULL,
[kdprop] [nchar](2) NULL,
[jumlahA] [bigint] NULL,
[jumlahB] [bigint] NULL,
[jumlahC] [bigint] NULL
) ON [PRIMARY]

GO

我已经尝试过了,但这并不是我想要的。

insert into sbr.dbo.tes_jumlah (kddesa,kdkec,kdkab,kdprop,jumlahA)
select * from sbr.dbo.tes_A
insert into sbr.dbo.tes_jumlah (kddesa,kdkec,kdkab,kdprop,jumlahB)
select * from sbr.dbo.tes_B
insert into sbr.dbo.tes_jumlah (kddesa,kdkec,kdkab,kdprop,jumlahC)
select * from sbr.dbo.tes_C

并尝试了此方法,但语法似乎不正确。

insert into sbr.dbo.tes_jumlah
Select a.kddesa,a.kdkec,a.kdkab,a.kdprop,a.jumlahA,b.jumlahB,c.jumlahC
from sbr.dbo.tes_A a
full join sbr.dbo.tes_B as b 
full join sbr.dbo.tes_C as c 
group by a.kddesa,a.kdkec,a.kdkab,a.kdprop

谢谢,如果我的英语不好,对不起。说明:插图我想要获得的东西是:我想获得什么

gofr1

您对FULL OUTER JOIN的查询差不多了!试试这个:

SELECT  p.kddsa,
        p.kdkec,
        p.kdkab,
        p.kdprop,
        a.jumlahA,
        b.jumlahB,
        c.jumlahC
FROM (
SELECT kddsa, kdkec, kdkab, kdprop
FROM tes_a
UNION
SELECT kddsa, kdkec, kdkab, kdprop
FROM tes_b
UNION
SELECT kddsa, kdkec, kdkab, kdprop
FROM tes_c) as p
LEFT JOIN tes_a as a
    ON p.kddsa=a.kddsa and p.kdkev=a.kdkec and p.kdkab=a.kdkab and p.kdprop=a.kdprop
LEFT JOIN tes_b as b
    ON p.kddsa=b.kddsa and p.kdkev=b.kdkec and p.kdkab=b.kdkab and p.kdprop=b.kdprop
LEFT JOIN tes_c as c
    ON p.kddsa=c.kddsa and p.kdkev=c.kdkec and p.kdkab=c.kdkab and p.kdprop=c.kdprop

带有UNION的部件将使您从所有表中获得所有前4列(无重复项),然后我们通过联接表来获取jumlahN列

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章