concatenare tabele

Întrebări legate de conectarea la alte baze de date relaţionale [PostgreSQL, mSQL, Oracle, Sybase, MS SQL Server] sau despre limbajul SQL în general.

Moderator: Moderatori

Amazing Science
Average Member
Mesaje: 131
Membru din: Dum Oct 15, 2006 7:27 pm

concatenare tabele

Mesajde Amazing Science » Mie Noi 28, 2007 6:42 pm

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.



oceans
Senior Member
Mesaje: 504
Membru din: Mar Noi 13, 2007 3:06 pm

Mesajde oceans » Mie Noi 28, 2007 7:44 pm

in ultimul tabel cu pacientii pe tot anul pacienti_2007, numele si adresa(in cazul in care ii chema la fel dar sunt persoane diferite adresa face diferenta) sa fie unique.

ALTER TABLE pacienti_2007 ADD CONSTRAINT UniqueValues UNIQUE (nume, adresa);

GIT
Junior Member
Mesaje: 38
Membru din: Mie Oct 12, 2005 8:00 am
Localitate: Resita
Contact:

Mesajde GIT » Joi Noi 29, 2007 8:01 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.
Daca nu acum.......atunci cand?

GIT
Junior Member
Mesaje: 38
Membru din: Mie Oct 12, 2005 8:00 am
Localitate: Resita
Contact:

Mesajde GIT » Joi Noi 29, 2007 8:08 pm

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.

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?

dechim
Senior Member
Mesaje: 1486
Membru din: Mar Mai 10, 2005 11:53 pm
Localitate: Drobeta Turnu Severin

Mesajde dechim » Joi Noi 29, 2007 8:55 pm

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 :

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.


Înapoi la “Alte baze de date”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 8 vizitatori