我在SQL Server中的映射表中遇到了一些问题。实际的代码很复杂,所以我只做一个简单的例子。假设我在DB中有5个表。表A,表B,表C,表D和转换表。查看下面的图像以获取更多详细信息
问题是:如何以简单的方式将记录插入新表? 我能想象的是通过连接表A,表B,表C和表D在新表中插入ida,idb,idc和idd。
很抱歉,如果我的问题非常简单。希望你能指导我。
修改 如果有人想看到代码。这是我到目前为止所做的代码。
if/else
我也尝试过:
use [db-sbr]
go
create procedure fillJumlahUnitInit
as
declare
@tahun char(4)
,@entry integer
,@exit integer
,@jumlahunit0 integer
,@jumlahunit1 integer
,@beroperasi integer
set @tahun=year(GETDATE())-1
declare @tahun1 char(4)
set @tahun1=year(getdate())-2
--pilih snapshot yang mau dipakai.
declare @snapshotini varchar(max)
set @snapshotini= (select name from sbr.dbo.snapshot_list where year(created_date) = @tahun and type='tahunan')
declare @snapshot_y1 varchar(max)
set @snapshot_y1= (select name from sbr.dbo.snapshot_list where year(created_date) = @tahun1 and type='tahunan')
DECLARE @SQLString NVARCHAR(500);
declare
@tabel1 nvarchar(max)='['+@snapshotini+'].dbo.commonthesis_en'
,@tabel2 nvarchar(max)='['+@snapshot_y1+'].dbo.commonthesis_en'
--jumlah birth = count (id) yang tahun berdiri sama dengan tahun snapshot
set @SQLString =
N'select @entry = COUNT(DISTINCT identerprise)
FROM '+@tabel1+N'
where tahunberdiri = '+@tahun
EXECUTE sp_executesql
@SQLString,N'@entry int out', @entry out;
--jumlah death= count (id) yang thn kmrn aktif join tahun ini tutup on idA=idB
set @SQLString=
N'select @exit = COUNT(DISTINCT y.identerprise)
FROM '+ @tabel1+N' as y
INNER JOIN '+ @tabel2+N' as y1
ON y1.identerprise= y.identerprise
where y.statusperusahaan=1 and y1.statusperusahaan=4';
EXECUTE sp_executesql
@SQLString,N'@exit int out', @exit out;
--jumlah awal tahun=jumlah akhir tahun kemarin
--init
set @SQLString =
N'Select @jumlahunit0= count (distinct identerprise)
from '+@tabel2+N' where statusperusahaan=1 or statusperusahaan=2
or statusperusahaan=3 or statusperusahaan=5)';
EXECUTE sp_executesql
@SQLString,N'@jumlahunit0 int out', @jumlahunit0 out;
--tahun berikutnya
/*
set @SQLString=N'Select @jumlahunit0= jumlahunit1
from SBR.dbo.jumlah_unit where tahun='+@tahun1
EXECUTE sp_executesql @SQLString,N'@jumlahunit0 int out', @jumlahunit0 out;
*/
--jumlah akhir tahun = count yang blm berproduksi/tutup sementara
set @SQLString =
N'Select @jumlahunit1= count (distinct identerprise)
from '+@tabel1+N' where statusperusahaan=2
or statusperusahaan=3 or statusperusahaan=5)';
EXECUTE sp_executesql
@SQLString,N'@jumlahunit1 int out', @jumlahunit1 out;
注意:use sbr
insert into note (kddesa,kdkec,kdkab,kdprop,kdkategori,kdkbli,statusperusahaan,unitstatistik,institusi)
select distinct a.kddesa,
a.kdkec,
a.kdkab,
a.kdprop,
a.kdkategori,
a.kdkbli,
a.statusperusahaan,
a.unitstatistik,
a.institusi
from [db-sbr].dbo.commonthesis_en as a
JOIN [db-sbr].dbo.m_institusi as b on b.kdinstitusi=a.institusi
JOIN [db-sbr].dbo.m_unitstatistik as c on c.kdsu=a.unitstatistik
JOIN [db-sbr].dbo.m_kondisi as d on d.kdkondisi=a.statusperusahaan
JOIN [db-sbr].dbo.m_kbli as e on e.kdkbli =a.kdkbli
JOIN [db-sbr].dbo.m_kategori as f on f.kdkategori=a.kdkategori
JOIN [db-sbr].dbo.m_propinsi as g on g.kdprop=a.kdprop
JOIN [db-sbr].dbo.m_kabupaten as h on h.kdprop=a.kdprop and h.kdkab=a.kdkab
JOIN [db-sbr].dbo.m_kecamatan as i on i.kdprop=a.kdprop and i.kdkab=a.kdkab and i.kdkec=a.kdkec
JOIN [db-sbr].dbo.m_desa as j on j.kdprop=a.kdprop and j.kdkab=a.kdkab and j.kdkec=a.kdkec and j.kddesa=a.kddesa
表是新表,note
表是转换表,其他表类似于表a,b,c,d。 commonthesis_en
是来自count的变量。但仍然是总数。 (我希望按@entry, @exit, @jumlahunit0, @jumlahunit1
,institusi
等计算,或者在示例中按unitstatistik
计算。)
答案 0 :(得分:1)
为什么不使用GROUP BY并从Converted Table
中选择?
INSERT INTO [New Table]
SELECT ida,
idb,
idc,
idd,
COUNT(unitid)
FROM [Converted Table]
GROUP BY ida, idb, idc, idd