插入表中有一些要求

时间:2016-07-23 14:51:07

标签: sql-server tsql

我在SQL Server中的映射表中遇到了一些问题。实际的代码很复杂,所以我只做一个简单的例子。假设我在DB中有5个表。表A,表B,表C,表D和转换表。查看下面的图像以获取更多详细信息 tables mapping

问题是:如何以简单的方式将记录插入新表? 我能想象的是通过连接表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, @jumlahunit1institusi等计算,或者在示例中按unitstatistik计算。)

1 个答案:

答案 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