试图加入并利用5个表中的一个

时间:2018-02-01 20:41:32

标签: sql sql-server

嘿大家在这里是我的代码,下面有五个表,  我试图做的是使用FACTURE表加入并利用每个表,结果应该是一个表(NUM_CMD / NOM_CLT / PRENOM_CLT / MONTANT_TOTAL_FACT),它表示客户端的名称及其命令编号和每个的总价格他买的产品(MONTANT_TOTAL_FACT = [PRIX_UNIT] * [QTE]) 类似的东西

======================================================
| NUM_CMD | PRENOM_CLT | NOM_CLT | MONTANT_TOTAL_FACT|
====================================================== 
| xxxxxx  | xxxxxxxxxx |    3    |    xxxxxxxxx      |


/*==============================================================*/
    /* Table: CLIENT                                                */
    /*==============================================================*/
    create table CLIENT (
       NUM_CLT              numeric              not null,
       NOM_CLT              text                 null,
       PRENOM_CLT           text                 null,
       VILLE_CLT            text                 null,
       ADRESSE_CLT          text                 null,
       TYPE_CLT             text                 null,
       CP_CLT               text                 null,
       constraint PK_CLIENT primary key(NUM_CLT)
    )



    Insert Into CLIENT Values(1,'Hauari','Kamal','Nador','Hay Matar rue 22','Grossiste','62010');
    Insert Into CLIENT Values(2,'Kharrati','Mohamed','Segangan','Hay zraqtoni rue 50','Grossiste','62100');
    Insert Into CLIENT Values(3,'El Mahi','Noureddine','Salwan','Hay wafae rue 10','Particulier','62000');
    Insert Into CLIENT Values(4,'Chakir','Hassan','Bni nsar','Hay Melilla rue 101','Particulier','62070');
    Insert Into CLIENT Values(5,'Benchikh','Youness','Nador','Hay bouaroro rue 122','Grossiste','62013');
    Insert Into CLIENT Values(6,'Esbai','Fouad','Nador','Hay Regolaris rue 111','Particulier','62090');



    /*==============================================================*/
    /* Table: COMMANDE                                               */
    /*==============================================================*/
    create table COMMANDE (
       NUM_CMD              numeric              not null,
       DATE_CMD             varchar(30)             null,
       NUM_CLT              numeric              not null,
       constraint pk_cmd primary key(NUM_CMD),
       constraint fK_clt foreign key(NUM_CLT) references CLIENT
    )

    Insert Into COMMANDE Values(1,'12-avr-2017',6)
    Insert Into COMMANDE Values(2,'12-avr-2017',5)
    Insert Into COMMANDE Values(3,'12-mai-2017',4)
    Insert Into COMMANDE Values(4,'14-mai-2017',3)
    Insert Into COMMANDE Values(5,'20-mai-2017',2)
    Insert Into COMMANDE Values(6,'30-mai-2017',1)

    /*==============================================================*/
    /* Table: PRODUIT                                               */
    /*==============================================================*/
    create table PRODUIT (
       REF_PRD              numeric              not null,
       DESIGNATION          text                 null,
       PRIX_UNIT            money                null,
       constraint PK_PRODUIT primary key(REF_PRD)
    )


    Insert Into Produit Values(1,'MONITEUR SONY 14P',1580)
    Insert Into Produit Values(2,'MONITEUR ACER 14P',1400)
    Insert Into Produit Values(3,'MONITEUR ACER 17P',4890)
    Insert Into Produit Values(4,'MONITEUR PHILIPS 20P',10500)
    Insert Into Produit Values(5,'MONITEUR PHILIPS 21P',14960)
    Insert Into Produit Values(6,'DESKJET 540',2100)
    Insert Into Produit Values(7,'CANON BJC4000',2700)
    Insert Into Produit Values(8,'EPSON STYLUS',800)
    Insert Into Produit Values(9,'CD ROM MITSUMI 4X',1650)
    Insert Into Produit Values(10,'CD ROM SONY 4X',1980)
    Insert Into Produit Values(11,'CD ROM TEAC 6x',2100)
    Insert Into Produit Values(12,'SCANNER PRIMAX COULEUR',2000)
    Insert Into Produit Values(13,'SCANNER PRIMAX MOBILE',2500)
    Insert Into Produit Values(14,'CARTE SOUND BLASTER PRO',500)
    Insert Into Produit Values(15,'CARTE SOUND BLASTER 16 VALUE',650)
    Insert Into Produit Values(16,'CARIE SOUND BLASTER A WE 32',1680)



    /*==============================================================*/
    /* Table: LIGNE_COMMANDE                                         */
    /*==============================================================*/
    create table LIGNE_COMMANDE (
    NUM_LCMD numeric identity,
       NUM_CMD              numeric              not null,
       REF_PRD              numeric              not null,
       QTE                  int                  null,
       constraint pk_lg_cmd primary key(NUM_LCMD),
       constraint fk_lg_cmd1 foreign key(NUM_CMD) references COMMANDE,
       constraint fk_lg_cmd2 foreign key(REF_PRD) references PRODUIT
    )

    Insert Into LIGNE_COMMANDE Values(6,1,2)
    Insert Into LIGNE_COMMANDE Values(5,2,2)
    Insert Into LIGNE_COMMANDE Values(4,3,7)
    Insert Into LIGNE_COMMANDE Values(3,4,5)
    Insert Into LIGNE_COMMANDE Values(2,5,3)
    Insert Into LIGNE_COMMANDE Values(2,6,2)

    CREATE table FACTURE(
    NUM_FACT int not null,
    DATE_FACT varchar(30),
    NUM_CMD numeric not null,
    REF_PRD numeric not null,
    NUM_LCMD numeric not null,
    NUM_CLT numeric not null,
    MONTANT_TOTAL_FACT float,
    constraint pk_nf primary key(NUM_FACT),
    constraint fk_nc1 foreign key(NUM_CMD) references COMMANDE,
    constraint fk_nc2 foreign key(REF_PRD) references PRODUIT,
    constraint fk_nc3 foreign key(NUM_LCMD) references LIGNE_COMMANDE,
    constraint fk_nc4 foreign key(NUM_CLT) references CLIENT
    );

--i try this one
select NOM_CLT,PRENOM_CLT,NUM_CMD,[PRIX_UNIT]*[QTE] as MONTANT_TOTAL_FACT  from CLIENT,COMMANDE,PRODUIT,LIGNE_COMMANDE,FACTURE where 
CLIENT.NUM_CLT = FACTURE.NUM_CLT and
COMMANDE.NUM_CMD = FACTURE.NUM_CMD and
PRODUIT.REF_PRD = FACTURE.REF_PRD and
LIGNE_COMMANDE.NUM_LCMD= FACTURE.NUM_LCMD;


-- the result was 'Nom de colonne 'NUM_CMD' ambigu'

1 个答案:

答案 0 :(得分:0)

您应该使用awk -v n=2 -v ps='A' -v pe='D' 'NR==FNR { if ($0 ~ ps) start=FNR else if ($0 ~ pe) stop=FNR+n if (stop) nextfile else next } !stop || FNR<start || FNR>stop' file file INNER JOIN来获得所需的结果:

GROUP BY