2016-07-23 3 views
0

SQLサーバーのマッピングテーブルに問題があります。実際のコードは複雑なので、私は単純な例を作成します。 DBに5つのテーブルがあるとします。表A、表B、表C、表D、および変換表。詳細は下の画像を参照してください。 tables mappingいくつかの要件でテーブルに挿入

質問です:簡単な方法で、新しいテーブルにレコードを挿入する方法? 私は想像することができるすべては、私の質問は本当に些細であれば申し訳ありません

D.

参加テーブルA、テーブルB、テーブルC、およびテーブルによって新しいテーブルにIDA、IDB、IDC、およびIDDを挿入しています。あなたが私を導くことを願っています。

誰かがコードを見たい場合。ここで私がこれまでに作ったコード。

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)='['[email protected]+'].dbo.commonthesis_en' 
     ,@tabel2 nvarchar(max)='['[email protected]_y1+'].dbo.commonthesis_en' 

    --jumlah birth = count (id) yang tahun berdiri sama dengan tahun snapshot 
    set @SQLString = 
    N'select @entry = COUNT(DISTINCT identerprise) 
    FROM '[email protected]+N' 
    where tahunberdiri = '[email protected] 

    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 '[email protected]+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='[email protected] 
    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 '[email protected]+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テーブルは新しいテーブルで、commonthesis_enテーブルをテーブルに変換され、他のテーブルは、テーブルA、B、C、Dのようなものです。 @entry, @exit, @jumlahunit0, @jumlahunit1はcountからの変数です。それでも合計数です。 (私はida,idb,idc,iddにより、institusiunitstatistikなどによって、または例では、それをカウントする。)

+0

ここでは、ユーザーが問題を解決するために努力してもらいたいと思っていますが、質問に仕事を入力することを拒否しています。私はそうは思わない。 –

+0

@PieterGeerkens、私は衰退しない。私は、ユーザーが問題を最も簡単に理解できるようにしたい。あなたがコードを望むなら、それを添付することができます。 – Kurniawantaari

答えて

1

Converted Tableから選択してGROUP BYを使用しないのはなぜ?

INSERT INTO [New Table] 
SELECT ida, 
     idb, 
     idc, 
     idd, 
     COUNT(unitid) 
FROM [Converted Table] 
GROUP BY ida, idb, idc, idd 
+0

ああ..私はそれを使用することができます。私はそれが働いている場合、これを答えとして受け入れます。 – Kurniawantaari

+0

選択クエリに基づいてビューを作成する方がよいかもしれません。 – gofr1

+0

あなたはチェックしましたか? – gofr1

関連する問題