salutare! apelez iar la ajutorul vostru, care intotdeauna a fost de mare folos...
in MS SQL Server am 3 (sau mai multe tabele) tabele: pac_01, pac_02, pac_03, etc cu exact aceleasi campuri, sa spunem:
nr_inreg, nume, adresa, telefon, data_consult, tratament, etc...
nr_inreg este cheie unica in fiecare tabela
in primul tabel am pacientii din ianuarie, in al doilea din februarie, in al treilea din martie, dar in felul urmator:
pac_01=pacientii din ianuarie
pac_02=pacientii din iaruarie (pac_01) + pacientii noi adaugati la 1 februarie
pac_03=pacientii din ianuarie si februarie (pac_02) + pacientii noi adaugati la 1 martie
de la o luna la alta apar pacienti noi, care se adauga in baza de date la fiecare data de 1 a lunii
vreau sa fac o tabela pacienti_2007 care sa aiba structura aceasta:
nr_inreg, nume, adresa, telefon, data_consult_01, tratament_01, data_consult_02, tratament_02, data_consult_03, tratament_03, etc
in acest tabel as dori, deasemenea, ca nr_inreg sa fie cheie primara (sa nu se repete un pacient, chiar daca el se afla in toate 3 tabelele)
ma puteti ajuta?
multumesc anticipat.
concatenare tabele
Moderator: Moderatori
-
- Average Member
- Mesaje: 131
- Membru din: Dum Oct 15, 2006 7:27 pm
Salut
Cred ca asta vrei: - o solutie dar nu cred ca este chiar super buna
//tabela 1
create table pac_01
(
nr_inreg number(10)
CONSTRAINT nn_nr_inreg NOT NULL
CONSTRAINT pk_nr_inreg PRIMARY KEY
,nume varchar2(100)
CONSTRAINT uk_nume NOT NULL UNIQUE
);
//inserare in tabela 1
insert into pac_01 values (1,'Popescu Ion');
insert into pac_01 values (2,'Popescu Vasile');
//tabela 2
create table pac_02
(
nr_inreg number(10)
CONSTRAINT nnn_nr_inreg NOT NULL
CONSTRAINT pkk_nr_inreg PRIMARY KEY
,nume varchar2(100)
CONSTRAINT ukk_nume NOT NULL UNIQUE
);
//inserare in tabela 2
insert into pac_02 values (3,'Pop Ion');
insert into pac_02 values (4,'Pop Vasile');
//inserarea datelor din tabela 1 in tabela 2
insert into pac_02 (nr_inreg,nume)
select p1.nr_inreg,p1.nume
from pac_01 p1
where p1.nr_inreg not in (select p2.nr_inreg
from pac_02 p2
where p2.nr_inreg <> p1.nr_inreg);
//vizualizarea datelor din tabela 2
select * from pac_02
La aceste tabele se adauga ce coloane mai doresti tu.
Intrebarea mea este - daca am inteles bine ce urmeaza sa faci - de ce nu faci o tabela generala si apoi din ea in functie de data adaugarii sa iti creezi tabele personalizate pe zile sau luni sau ce ai tu nevoie.
Bafta.
Cred ca asta vrei: - o solutie dar nu cred ca este chiar super buna
//tabela 1
create table pac_01
(
nr_inreg number(10)
CONSTRAINT nn_nr_inreg NOT NULL
CONSTRAINT pk_nr_inreg PRIMARY KEY
,nume varchar2(100)
CONSTRAINT uk_nume NOT NULL UNIQUE
);
//inserare in tabela 1
insert into pac_01 values (1,'Popescu Ion');
insert into pac_01 values (2,'Popescu Vasile');
//tabela 2
create table pac_02
(
nr_inreg number(10)
CONSTRAINT nnn_nr_inreg NOT NULL
CONSTRAINT pkk_nr_inreg PRIMARY KEY
,nume varchar2(100)
CONSTRAINT ukk_nume NOT NULL UNIQUE
);
//inserare in tabela 2
insert into pac_02 values (3,'Pop Ion');
insert into pac_02 values (4,'Pop Vasile');
//inserarea datelor din tabela 1 in tabela 2
insert into pac_02 (nr_inreg,nume)
select p1.nr_inreg,p1.nume
from pac_01 p1
where p1.nr_inreg not in (select p2.nr_inreg
from pac_02 p2
where p2.nr_inreg <> p1.nr_inreg);
//vizualizarea datelor din tabela 2
select * from pac_02
La aceste tabele se adauga ce coloane mai doresti tu.
Intrebarea mea este - daca am inteles bine ce urmeaza sa faci - de ce nu faci o tabela generala si apoi din ea in functie de data adaugarii sa iti creezi tabele personalizate pe zile sau luni sau ce ai tu nevoie.
Bafta.
Daca nu acum.......atunci cand?
Salut
Daca mergi pe ideea de a avea o tabela generala din care vrei sa faci tabele pe luni faci ceva de genul asta dupa ce introduci datele in tabela generala - aceasta trebuie sa aiba de preferat campul data in care a fost adaugat sau consultat pacientul.
Atentie: EXTRACT numai de la Oracle 9i2 dupa cate stiu eu
Bafta
Daca mergi pe ideea de a avea o tabela generala din care vrei sa faci tabele pe luni faci ceva de genul asta dupa ce introduci datele in tabela generala - aceasta trebuie sa aiba de preferat campul data in care a fost adaugat sau consultat pacientul.
Cod: Selectaţi tot
insert all
when extract (MONTH from data) = 7 then
into pac_iulie
when extract (MONTH from data) = 8 then
into pac_august
Atentie: EXTRACT numai de la Oracle 9i2 dupa cate stiu eu
Bafta
Daca nu acum.......atunci cand?
-
- Senior Member
- Mesaje: 1486
- Membru din: Mar Mai 10, 2005 11:53 pm
- Localitate: Drobeta Turnu Severin
Are dreptate @GIT ar trebui sa ai o singura tabela pe care sa o actualizezi si daca vrei sa faci tabele pe luni, desi nu le vad rostul, poti face de fapt VIEW-uri
dupa sintaxa MS SQL SERVER :
Probabil ca cel care a facut aplicatia a lucrat mai inainte in FoxPro si foloseste tabele mai mici pentru ca se justificau acolo da' aici nu-i cazul. O singura tabela e de ajuns.
Pentru optimizare eu as zice doua:
tabela 1 :
id1, cnp, nume, adresa, telefon, (alte date de identificare a pacientului)
tabela 2:
id2, id1, nr_inreg, data_consult, tratament (alte date referitoare la investigatie si tratament)
Poate ar fi bine sa transformi tabelel in asa ceva. Va fi mai usor in viitor.
dupa sintaxa MS SQL SERVER :
Cod: Selectaţi tot
CREATE VIEW view_name [(column [,...n])]
[WITH ENCRYPTION]
AS
select_statement
[WITH CHECK OPTION]
Probabil ca cel care a facut aplicatia a lucrat mai inainte in FoxPro si foloseste tabele mai mici pentru ca se justificau acolo da' aici nu-i cazul. O singura tabela e de ajuns.
Pentru optimizare eu as zice doua:
tabela 1 :
id1, cnp, nume, adresa, telefon, (alte date de identificare a pacientului)
tabela 2:
id2, id1, nr_inreg, data_consult, tratament (alte date referitoare la investigatie si tratament)
Poate ar fi bine sa transformi tabelel in asa ceva. Va fi mai usor in viitor.
Cine este conectat
Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 8 vizitatori