IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Jointure avec données NULL


Sujet :

Développement SQL Server

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Points : 10
    Points
    10
    Par défaut Jointure avec données NULL
    Bonjour,

    J'ai une table qui contient 2 lignes pour chaque article qui est pesé (une fois à l'entrée, et une fois à la sortie). L'article arrive sur un plateau X et ressort soit sur un plateau Y, soit sur aucun plateau.

    J'ai donc une table qui contient disons les données suivantes :
    article - poids - plateauentree - plateausortie
    article1 - 500 - 1 -
    article1 - - - 2
    article2 - 700 - 3 -
    article2 - - -

    Je veux avoir comme résultat les données de l'article sur une même ligne, même si le plateau de sortie est null.

    Si je mets le code suivant, il me manque 1 article:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT T1.article, T1.poids, T1.plateauentree, T2.plateausortie
    FROM Table1 AS T1 LEFT JOIN Table1 AS T2 ON T1.article=T2.article
    WHERE T1.poids is not null AND T2.plateausortie is not null;
    et avec celui-ci, j'en ai de trop :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT T1.article, T1.poids, T1.plateauentree, T2.plateausortie
    FROM Table1 AS T1 LEFT JOIN Table1 AS T2 ON T1.article=T2.article
    WHERE T1.poids is not null;
    Quelqu'un aurait-il une piste de solution pour m'aider?
    Merci!

  2. #2
    Membre confirmé Avatar de agemis31
    Profil pro
    DBA
    Inscrit en
    Octobre 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : DBA

    Informations forums :
    Inscription : Octobre 2007
    Messages : 399
    Points : 478
    Points
    478
    Par défaut Design
    Bonjour,


    Il me semble bizarre d'avoir deux lignes dans une table pour une entité, à moins que votre entité soit une pesée entrée-sortie plutôt qu'un article.

    J'aurai plutôt vu ceci

    • Une table article (articleid)
    • Une table plateau (plateauid)
    • Une table pesée (articleid, poids, plateauid, bPlateauEntree, ...)


    Avec bPlateauEntree au niveau de plateau si c'est une caractéristique du plateau plutôt que de la pesée (si un plateau en entrée ne deviendra jamais un plateau en sortie et inversement).

    Avec votre design actuel, est ce que ceci peut vous aider ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    declare @t table (article varchar(50),poids int, plateauentree int, plateausortie int)
    insert into @t select 'article1', 500, 1, null
    insert into @t select 'article1', 550, null, 2
    insert into @t select 'article2', 700, 3, null
    insert into @t select 'article2', null, null, null 
     
    select T1.article, T1.poids as poids_entree, T1.plateauentree, T2.poids as poids_sortie, T2.plateausortie from @t T1
    left join @t T2 on T1.article = T2.article 
    where 
    	T1.plateauentree is not null
    and 
    	T2.plateauentree is null
    @+

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    Merci pour ta réponse agemis31.

    Effectivement, c'est une table de pesée entrée-sortie, mais le numéro de plateau peut être différent à l'entrée et à la sortie. Il y a aussi des cas où l'on n'a pas de plateau ni à l'entrée, ni à la sortie.

    Le design de la bd est baucoup plus complexe que décrit, mais je l'ai simplifié au max pour poser ma question. En gros, je veux pouvoir ramener le plateau de sortie sur la même ligne que toutes les autres informations contenue dans le premier enregistrement avec une requête, si plateau de sortie il y a.

    Ton code m'a donné une piste de solution, mais si je n'ai ni plateau d'entrée ni plateau de sortie, ma requête ne sort pas de résultat.

    Merci encore.

  4. #4
    Membre confirmé Avatar de agemis31
    Profil pro
    DBA
    Inscrit en
    Octobre 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : DBA

    Informations forums :
    Inscription : Octobre 2007
    Messages : 399
    Points : 478
    Points
    478
    Par défaut Ca n'a pas l'air simple !
    Bonsoir,

    C'est bizarre cette asymétrisme entre le poids (unique) et les deux plateaux.


    Est ce ce ceci fonctionne ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    -- attribue le poids en entrée ou en sortie
    ;with c (article, poids_entree, plateauentree, poids_sortie, plateau_sortie)
    as
    (
    select T1.article, 
    case 
    	ISNULL(plateauentree,0) 
    	when 0 then null
    	else poids 
    end as poids_entree, 
    T1.plateauentree,
    case 
    	ISNULL(plateausortie,0) 
    	when 0 then null
    	else poids 
    end as poids_sortie, 
    T1.plateausortie
    from @t T1
    )
    ,
    -- il faut prendre tous les articles
    A (article) as (select distinct article from c)
    select a.article, c1.plateauentree, c1.poids_entree, c2.plateau_sortie, c2.poids_sortie
    from A  
    left join c c1 on a.article = c1.article and c1.poids_entree is not null
    left join c c2 on a.article = c2.article and c2.poids_sortie is not null
    Il y a peut être à creuser du côté unpivot pour cette table.

    @+

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 719
    Points
    52 719
    Billets dans le blog
    5
    Par défaut
    N'oubliez jamais que les tables sont par nature ensembliste DONC PAS D'ORDRE ! Donc il n'existe pas de ligne précédente ni suivante... Ce que vous avez supposé par vos requêtes...

    Voici la solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT T1.article, COALESCE(T1.poids, T2.Poids), 
                       COALESCE(T1.plateauentree, T2.plateauentree),
                       COALESCE(T2.plateausortie, T1.plateausortie)
    FROM   Table1 AS T1 
           LEFT OUTER JOIN Table1 AS T2 
                ON T1.article=T2.article
    A lire sur le sujet : http://blog.developpez.com/sqlpro/p5...sont-des-ense/

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  6. #6
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    Merci à vous 2, agemis31 et SQLpro pour vos réponses,

    SQLpro, je ne connaissais pas cette fonction, COALESCE. Je sens que je me rapproche d'une solution, mais quand j'exécute ma requête avec le COALESCE, j'ai comme résultat 2 lignes pour chaque article, la première ayant NULL comme plateau de sortie, et la seconde ayant le plateau de sortie.

    Je vais vous mettre mon véritable code ici, sans simplification, j'espère que vous pourrez m'aider à trouver mon problème...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    SELECT     TT.STATUS, 
    TD1.TRANS_NO AS NoTrans, 
    TT.TICKET_DATE AS DateSortie, 
    A.DESCRIPTION AS Transporteurs, 
    P.DESCRIPTION AS Produit,
    O.DESCRIPTION AS Secteurs, 
    D.DESCRIPTION AS Destination, 
    TD1.USER_TEXT1 AS SDDI, 
    TD1.USER_TEXT2 AS PlateauEntree, 
    COALESCE (td.USER_TEXT3, TD1.USER_TEXT3) AS PlateauSortie,
    TT.TOTAL_NET_WEIGHT AS PoidNet,
    TD1.WEIGHT AS Poid
    FROM         overdrive.TRANSACTION_DETAIL TD1 
    LEFT OUTER JOIN overdrive.PRODUCT P ON TD1.PRODUCT_ID = P.PRODUCT_ID 
    LEFT OUTER JOIN overdrive.ORIGIN O ON TD1.ORIGIN_ID = O.ORIGIN_ID 
    RIGHT OUTER JOIN overdrive.TRANSACTION_TABLE TT ON TD1.TRANS_NO = TT.TRANS_NO 
    INNER JOIN overdrive.ACCOUNT A ON TT.ACCOUNT_ID = A.ACCOUNT_ID 
    LEFT OUTER JOIN overdrive.DESTINATION D ON TD1.DESTINATION_ID = D.DESTINATION_ID 
    LEFT OUTER JOIN overdrive.TRANSACTION_DETAIL td ON TD1.TRANS_NO = td.TRANS_NO
    WHERE     (TT.STATUS IN ('C', 'M')) AND (TD1.NET_WEIGHT IS NOT NULL)
    Merci encore!

  7. #7
    Membre confirmé Avatar de agemis31
    Profil pro
    DBA
    Inscrit en
    Octobre 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : DBA

    Informations forums :
    Inscription : Octobre 2007
    Messages : 399
    Points : 478
    Points
    478
    Par défaut Merci
    Bonsoir,

    Pour ma part, un petit script DDL + remplissage des tables avec des données d'exemple ne me ferait pas de mal.

    Je reviens sur l'histoire des poids:

    TT.TOTAL_NET_WEIGHT AS PoidNet,
    TD1.WEIGHT AS Poid
    Quelle sont les définitions de PoidNet et de Poid dans ce système ?

    @+

  8. #8
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    Le poids est le poids de la pesée (entrée ou sortie), et le poids net est le poids de la sortie - le poids de l'entrée. Mais là n'est pas le problème.

    Je ne peux pas vous mettre d'exemple car les données sont confidentielles.

    Merci encore.

  9. #9
    Membre confirmé Avatar de agemis31
    Profil pro
    DBA
    Inscrit en
    Octobre 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : DBA

    Informations forums :
    Inscription : Octobre 2007
    Messages : 399
    Points : 478
    Points
    478
    Par défaut J'ai du passer à côté...
    Bonsoir (again),

    Je ne comprends pas la remarque de SQLPro, sur le code non ensembliste.
    Je ne vois aucune supposition sur l'ordre des lignes dans le code de ce post.

    Quand à ton problème, pour moi il est résolu, ou alors je passe complètement à coté et je suis désolé de poluer ce post.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    declare @t table (article varchar(50), poids int, plateauentree int, plateausortie int)
     
     
    insert into @t select 'article1',NULL,NULL,NULL
    insert into @t select 'article2',750,null,4
    insert into @t select 'article2',700,3,NULL
    insert into @t select 'article1',500,1,NULL
    insert into @t select 'article3',null,null,null
    insert into @t select 'article5',600,null,4
     
    ;with c (article, poids_entree, plateauentree, poids_sortie, plateau_sortie)
    AS
    (
    SELECT T1.article, 
    case 
    	ISNULL(plateauentree,0) 
    	when 0 then NULL
    	else poids 
    end AS poids_entree, 
    T1.plateauentree,
    case 
    	ISNULL(plateausortie,0) 
    	when 0 then NULL
    	else poids 
    end AS poids_sortie, 
    T1.plateausortie
    FROM @t T1
    )
    ,
    -- il faut prendre tous les articles
    A (article) AS (SELECT DISTINCT article FROM c)
    SELECT a.article, ISNULL(c1.poids_entree, c2.poids_sortie) as poids, 
    	   c2.poids_sortie - c1.poids_entree as poidsnet, 
    	   c1.plateauentree, c2.plateau_sortie
    FROM A  
    LEFT JOIN c c1 ON a.article = c1.article AND c1.poids_entree IS NOT NULL
    LEFT JOIN c c2 ON a.article = c2.article AND c2.poids_sortie IS NOT NULL
    Cordialement,

  10. #10
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Points : 10
    Points
    10
    Par défaut Script DDL
    Voici mon script DDL pour les 2 principales tables (transaction_table et transaction_detail), ainsi que celui de la vue qe je crée avec ma requête, si ça peut vous être utile.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    if exists (select * from dbo.sysobjects where id = object_id(N'[overdrive].[TRANS_DETAIL_MULTI_AXLE_FK1]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
    ALTER TABLE [overdrive].[MULTI_AXLE] DROP CONSTRAINT TRANS_DETAIL_MULTI_AXLE_FK1
    GO
     
    if exists (select * from dbo.sysobjects where id = object_id(N'[overdrive].[TRANS_TAX_SURCH_FK1]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
    ALTER TABLE [overdrive].[TRANS_TAX_SURCH] DROP CONSTRAINT TRANS_TAX_SURCH_FK1
    GO
     
    if exists (select * from dbo.sysobjects where id = object_id(N'[overdrive].[TRANS_DETAIL_FK1]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
    ALTER TABLE [overdrive].[TRANSACTION_DETAIL] DROP CONSTRAINT TRANS_DETAIL_FK1
    GO
     
    if exists (select * from dbo.sysobjects where id = object_id(N'[overdrive].[TRANSACTION_DETAIL]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    drop table [overdrive].[TRANSACTION_DETAIL]
    GO
     
    if exists (select * from dbo.sysobjects where id = object_id(N'[overdrive].[TRANSACTION_TABLE]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    drop table [overdrive].[TRANSACTION_TABLE]
    GO
     
    CREATE TABLE [overdrive].[TRANSACTION_DETAIL] (
    	[TRANS_NO] [varchar] (40) COLLATE French_CI_AS NOT NULL ,
    	[WEIGHING_NO] [int] NOT NULL ,
    	[PRODUCT_ID] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[CONTAINER_ID] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[NO_OF_CONTAINERS] [int] NULL ,
    	[TRAILER_ID] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[WEIGHT] [float] NULL ,
    	[VOLUME] [float] NULL ,
    	[NET_WEIGHT] [float] NULL ,
    	[NET_PRICE] [float] NULL ,
    	[PIECES] [int] NULL ,
    	[MANUAL_WEIGHT] [varchar] (1) COLLATE French_CI_AS NULL ,
    	[SPLIT_WEIGHT1] [float] NULL ,
    	[SPLIT_WEIGHT2] [float] NULL ,
    	[VEHICLE_TARE] [float] NULL ,
    	[MANUAL_VEHICLE_TARE] [varchar] (1) COLLATE French_CI_AS NULL ,
    	[PRICE_FORMULA] [varchar] (50) COLLATE French_CI_AS NULL ,
    	[UNIT_PRICE] [float] NULL ,
    	[CONTAINER_TARE] [float] NULL ,
    	[CONTAINER_VOLUME] [float] NULL ,
    	[TRAILER_TARE] [float] NULL ,
    	[TRAILER_VOLUME] [float] NULL ,
    	[WEIGHING_DATE] [datetime] NULL ,
    	[SCALE_NAME] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[BUTTS_AHEAD] [int] NULL ,
    	[LOG_SORT] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[PEELER_PERCENT] [int] NULL ,
    	[STORAGE_LOCATION] [varchar] (50) COLLATE French_CI_AS NULL ,
    	[LOGS_BURNT] [varchar] (1) COLLATE French_CI_AS NULL ,
    	[FORESTRY_TRANS_TYPE] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[MILL] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[TIMBERMARK] [varchar] (255) COLLATE French_CI_AS NULL ,
    	[BLOCK] [varchar] (25) COLLATE French_CI_AS NULL ,
    	[EXTENDED_TABLE16] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[EXTENDED_TABLE17] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[EXTENDED_TABLE18] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[EXTENDED_TABLE19] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[EXTENDED_TABLE20] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[EXTENDED_TABLE21] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[EXTENDED_TABLE22] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[EXTENDED_TABLE23] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[EXTENDED_TABLE24] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[EXTENDED_TABLE25] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[PERMIT_ID] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[WEIGHING_UNIT] [varchar] (2) COLLATE French_CI_AS NULL ,
    	[DELIVERY_NUMBER] [varchar] (25) COLLATE French_CI_AS NULL ,
    	[AGRI_TRANS_TYPE] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[PERCENT_WASTE] [float] NULL ,
    	[PERCENT_MOISTURE] [float] NULL ,
    	[ORIGINAL_WEIGHT] [float] NULL ,
    	[EXPIRATION_NOTICES] [varchar] (255) COLLATE French_CI_AS NULL ,
    	[PROFILE_ID] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[LOAD_PERCENT] [float] NULL ,
    	[SP_ID] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[BCLT] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[SA_ID] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[GENERATOR_ID] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[ORIGIN_ID] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[MANIFEST_ID] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[PO_NUMBER] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[DESTINATION_ID] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[PRICE_TYPE_DESCRIPTION] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[CONVERSION_FACTOR] [float] NULL ,
    	[USER_NUMBER1] [float] NULL ,
    	[USER_TEXT1] [varchar] (50) COLLATE French_CI_AS NULL ,
    	[USER_ID] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[USER_NUMBER2] [float] NULL ,
    	[USER_NUMBER3] [float] NULL ,
    	[USER_TEXT2] [varchar] (50) COLLATE French_CI_AS NULL ,
    	[USER_TEXT3] [varchar] (50) COLLATE French_CI_AS NULL ,
    	[VOLUME_UOM] [varchar] (1) COLLATE French_CI_AS NULL ,
    	[TRAILER_VOLUME_UOM] [varchar] (1) COLLATE French_CI_AS NULL ,
    	[CONTAINER_VOLUME_UOM] [varchar] (1) COLLATE French_CI_AS NULL ,
    	[SRSN] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[SITE_ID] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[TICKET_NUMBER] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[TOTAL_SURCHARGES] [float] NULL ,
    	[TOTAL_TAXES] [float] NULL ,
    	[UNIT_PRICE_UOM] [varchar] (1) COLLATE French_CI_AS NULL 
    ) ON [PRIMARY]
    GO
     
    CREATE TABLE [overdrive].[TRANSACTION_TABLE] (
    	[TRANS_NO] [varchar] (40) COLLATE French_CI_AS NOT NULL ,
    	[VEHICLE_ID] [varchar] (20) COLLATE French_CI_AS NOT NULL ,
    	[COMPANY_ID] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[ACCOUNT_ID] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[SHIPPING_ID] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[PAYMENT_TYPE_ID] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[MASTER_TRANS_NO] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[LOAD_NO] [int] NULL ,
    	[REMARK1] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[REMARK2] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[STATUS] [varchar] (1) COLLATE French_CI_AS NULL ,
    	[CARRIER_ID] [varchar] (20) COLLATE French_CI_AS NOT NULL ,
    	[OPERATION] [varchar] (1) COLLATE French_CI_AS NULL ,
    	[TOTAL_NET_WEIGHT] [float] NULL ,
    	[TOTAL_NET_PRICE] [float] NULL ,
    	[TOTAL_SURCHARGES] [float] NULL ,
    	[TOTAL_TAXES] [float] NULL ,
    	[TOTAL_PRICE] [float] NULL ,
    	[TRUCK_ONLY] [varchar] (1) COLLATE French_CI_AS NULL ,
    	[TRANSACTION_TYPE] [varchar] (1) COLLATE French_CI_AS NULL ,
    	[CONTRACT_ID] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[SPLIT_WEIGHING] [varchar] (1) COLLATE French_CI_AS NULL ,
    	[MULTI_AXLE] [varchar] (1) COLLATE French_CI_AS NULL ,
    	[NO_OF_AXLES] [int] NULL ,
    	[SAMPLED] [varchar] (1) COLLATE French_CI_AS NULL ,
    	[EXTENDED_TABLE1] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[EXTENDED_TABLE2] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[EXTENDED_TABLE3] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[EXTENDED_TABLE4] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[EXTENDED_TABLE5] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[EXTENDED_TABLE6] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[EXTENDED_TABLE7] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[EXTENDED_TABLE8] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[EXTENDED_TABLE9] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[EXTENDED_TABLE10] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[EXTENDED_TABLE11] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[EXTENDED_TABLE12] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[EXTENDED_TABLE13] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[EXTENDED_TABLE14] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[EXTENDED_TABLE15] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[TRANSACTION_START_DATE] [datetime] NULL ,
    	[TRANSACTION_COMPLETE_DATE] [datetime] NULL ,
    	[STRATUM_ID] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[FORMULA_ID] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[VEHICLE_VOLUME] [float] NULL ,
    	[DISTANCE] [float] NULL ,
    	[NOTES] [varchar] (255) COLLATE French_CI_AS NULL ,
    	[TICKET_IN] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[TICKET_OUT] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[ORIGINAL_TRANS_NO] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[MODIFICATION_REASON] [varchar] (255) COLLATE French_CI_AS NULL ,
    	[TRANSACTION_TYPE_ID] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[DRIVER_ID] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[GROSS_WEIGHT] [float] NULL ,
    	[TARE_WEIGHT] [float] NULL ,
    	[CHECK_NUMBER] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[DRIVERS_LICENSE_NUMBER] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[AUTHORIZATION_NUMBER] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[TICKET_DATE] [datetime] NULL ,
    	[MANUAL_TICKET_NUMBER] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[USER_NUMBER1] [float] NULL ,
    	[USER_TEXT1] [varchar] (50) COLLATE French_CI_AS NULL ,
    	[ALLOW_MODIFY_FLAG] [varchar] (1) COLLATE French_CI_AS NULL ,
    	[LAST_MODIFIED_DATE] [datetime] NULL ,
    	[LAST_MODIFIED_BY] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[INTERFACE_FLAG1] [varchar] (1) COLLATE French_CI_AS NULL ,
    	[INTERFACE_FLAG2] [varchar] (1) COLLATE French_CI_AS NULL ,
    	[USER_NUMBER2] [float] NULL ,
    	[USER_NUMBER3] [float] NULL ,
    	[USER_TEXT2] [varchar] (50) COLLATE French_CI_AS NULL ,
    	[USER_TEXT3] [varchar] (50) COLLATE French_CI_AS NULL ,
    	[TOTAL_TICKET_VOLUME] [float] NULL ,
    	[TOTAL_TICKET_VOLUME_UOM] [varchar] (1) COLLATE French_CI_AS NULL ,
    	[INVOICE_NUMBER] [int] NULL ,
    	[SITE_ID] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[TICKET_NUMBER] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[TOTAL_NET_WEIGHT_UOM] [varchar] (1) COLLATE French_CI_AS NULL 
    ) ON [PRIMARY]
    GO
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TRANS_temp5]') and OBJECTPROPERTY(id, N'IsView') = 1)
    drop view [dbo].[TRANS_temp5]
    GO
     
    SET QUOTED_IDENTIFIER ON 
    GO
    SET ANSI_NULLS ON 
    GO
     
    CREATE VIEW dbo.TRANS_temp5 AS SELECT TT.STATUS, TD1.TRANS_NO AS NoTrans, TT.TICKET_DATE AS DateSortie, A.DESCRIPTION AS Transporteurs, P.DESCRIPTION AS Produit, O.DESCRIPTION AS Secteurs, D.DESCRIPTION AS Destination, TD1.USER_TEXT1 AS SDDI, TD1.USER_TEXT2 AS PlateauEntree, COALESCE(TD.USER_TEXT3,TD1.USER_TEXT3) AS PlateauSortie, TT.TOTAL_NET_WEIGHT AS PoidNet, TD1.WEIGHT AS Poid FROM overdrive.TRANSACTION_DETAIL AS TD1 LEFT OUTER JOIN overdrive.PRODUCT AS P ON TD1.PRODUCT_ID = P.PRODUCT_ID LEFT OUTER JOIN overdrive.ORIGIN AS O ON TD1.ORIGIN_ID = O.ORIGIN_ID RIGHT OUTER JOIN overdrive.TRANSACTION_TABLE AS TT ON TD1.TRANS_NO = TT.TRANS_NO INNER JOIN overdrive.ACCOUNT AS A ON TT.ACCOUNT_ID = A.ACCOUNT_ID LEFT OUTER JOIN overdrive.DESTINATION AS D ON TD1.DESTINATION_ID = D.DESTINATION_ID LEFT OUTER JOIN overdrive.TRANSACTION_DETAIL AS TD ON TD1.TRANS_NO = TD.TRANS_NO WHERE (TT.STATUS IN ('C', 'M')) AND (TD1.NET_WEIGHT IS NOT NULL)
    GO
    SET QUOTED_IDENTIFIER OFF 
    GO
    SET ANSI_NULLS ON 
    GO

  11. #11
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Points : 10
    Points
    10
    Par défaut Ça marche!
    Merci SQLPro et surtout agemis31, tout fonctionne maintenant.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Résultat jointure avec champs null
    Par ideal23 dans le forum Langage SQL
    Réponses: 26
    Dernier message: 12/12/2011, 11h12
  2. [AC-2000] Pb de jointure avec valeur null
    Par popysan dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 07/04/2011, 14h37
  3. jointure avec champ à null
    Par radahm dans le forum PL/SQL
    Réponses: 2
    Dernier message: 03/11/2009, 10h51
  4. Requete select : jointure avec champs null
    Par Tidus159 dans le forum Langage SQL
    Réponses: 13
    Dernier message: 06/06/2008, 13h31
  5. Réponses: 14
    Dernier message: 05/09/2006, 17h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo