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

MS SQL Server Discussion :

intersection de 4 segments


Sujet :

MS SQL Server

  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Février 2011
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2011
    Messages : 176
    Par défaut intersection de 4 segments
    Bonjour,

    J'aimerais savoir s'il existe une solution en t-sql qui détermine les bornes d'intersection de 4 segments colinéaires.J'ai besoin que des bornes des parties des segments inclus dans le premier segment.

    Merci de m'aider.

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2003
    Messages : 733
    Billets dans le blog
    8
    Par défaut
    Sous SQL Server, tu as à ta disposition le langage T-SQL , mais tu as également la possibilité d'écrire des fonctions et procédures en mettant en ouvre la CLR (Common Langage Runtime) (concrètement utiliser par exemple C# .Net sous SQL Server)

    Dans les 2 cas (T-SQL ou CLR), il faut mettre au clair l'algorithme et écrire la fonction !

    Si par exemple tu disposes de l'algorithme voire même de la fonction déjà écrite en C# .Net (ou VB .Net), alors utiliser la CLR serait peut être, pour toi, la solution la plus appropriée (c.à.d la solution la plus rapide).

    Ci-dessous un lien qui traite de l'utilisation de la CLR sous SQL Server
    http://msdn.microsoft.com/en-us/library/ms345136

    A+

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Février 2011
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2011
    Messages : 176
    Par défaut
    Bonjour,

    oui merci pour ces conseils,mais je suis encore bloqué dans " il faut mettre au clair l'algorithme et écrire la fonction".!!!

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour

    peut-être pouvez vous donner un peu plus de précisions. quelles données avez vous, sous quelle forme, ...

    et un petit jeu d'essai + résultats attendus seraient les bienvenus !

  5. #5
    Membre très actif
    Profil pro
    Inscrit en
    Février 2011
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2011
    Messages : 176
    Par défaut
    Merci,
    Voici ma sources de données:
    chaque produit a quatre prix et chaque prix a une date début et une date fin.
    cet exemple pour 3 prix:

    code deb fin px deb fin py deb fin pz
    111 2008/15/01 ..2008/29/01 x 2008/10/01 .2008/18/01 y 2008/25/01.2008/29/01 z

    Sortie dans la nouvelle table:
    code debut fin prix
    111 2008/15/01.... 2008/18/01 p1(=x+ y)
    111 2008/18/01.... 2008/25/01 p2 (=x)
    111 2008/25/01.... 2008/29/01 p3 (x+z)

    Le choix des dates se fait selon les dates de modification de Y et Z, à chaque modification de dates je calcule un prix (X+Y+Z),L'intersection des dates se fait tjrs avec l'intervalle de X.

  6. #6
    Membre très actif
    Profil pro
    Inscrit en
    Février 2011
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2011
    Messages : 176
    Par défaut
    La source de données est sql server,

    J'ai réflichi à faire une requête qui traite tout les cas, (case when then formule )
    (case when then date)
    mais il y a un très grand nombre de cas pour les différents segment ,en plus je peux pas avoir pour une même ligne source par exemple 4 lignes en sortie,je dois imbriqué plusieurs select....

    C'est compliqué comme si je fais le traitement manuellement.
    Je pensais à créer une fonction qui permet de faire ça.

  7. #7
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Citation Envoyé par AJ_ing Voir le message
    en plus je peux pas avoir pour une même ligne source par exemple 4 lignes en sortie,je dois imbriqué plusieurs select....
    Vous n'etes pas obligé d'imbriquer des select pour obtenir plusieurs lignes de resultats pour une ligne dans la table
    vous pouvez par exemple jouer sur les auto-jointures...

    bien sur, comme je disais, avec un exemple concret, ca serait plus simple pour bien comprendre votre besoin... EDIT : pardon, je n'avais pas vu votre post précédent... par contre, i lnous faudrait la structure de la table source (je ne pense pas que vous ayez 3 colonnes "deb" dans la même table )

  8. #8
    Membre très actif
    Profil pro
    Inscrit en
    Février 2011
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2011
    Messages : 176
    Par défaut
    oui bien sur "je ne pense pas que vous ayez 3 colonnes "deb" dans la même table"

    J'ai fais jointure entre 3 tables de chaque prix ayant tous dat_debut dat_fin,
    mais j'ai besoin des prix de chaque table pour avoir le prix final (la somme des trois) à chaque modification.

    Est ce que ce que je dis est clair.

  9. #9
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    hé bien donnez nous la structure des 3 tables...

  10. #10
    Membre très actif
    Profil pro
    Inscrit en
    Février 2011
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2011
    Messages : 176
    Par défaut
    tab1:
    code dat_debut dat_fin prix1

    tab2:
    code dat_debut dat_fin prix2

    tab3:
    code dat_debut dat_fin prix3


    merci

  11. #11
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Il me semblait bien que cette question me disait quelque chose...

    Seulement, la structure de vos tables, ainsi que le besoin précis semble changer à chaque fois...

    postez-nous :
    1/ DDL de vos vraies tables contenant vos données
    2/ un jeu d'essai sous forme "INSERT INTO..."
    3/ le résultat attendu

    pour le jeu d'essai, mettez un peu plus qu'une ligne, en essayant de couvrir plusieurs cas (date début de y antérieure/postérieure à date debut de x, ...)

  12. #12
    Membre très actif
    Profil pro
    Inscrit en
    Février 2011
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2011
    Messages : 176
    Par défaut
    oui ces dans le même contexte !!! mais j'ai pas bien exprimé mon problème,
    Bref,
    Source:
    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
    tab1:X
    SELECT  [PK]
          ,[fk_ARTICLE]
          ,[DATE_DEB]
          ,[DATE_FIN]
          ,PR_TARIF
      FROM  TF
     
    tab2:Y
    SELECT  [PK]
          ,[fk_ARTICLE]
          ,[DATE_DEB]
          ,[DATE_FIN]
          ,MT_REM
      FROM rem
    tab3:Z
    SELECT  [PK]
          ,[fk_ARTICLE]
          ,[DATE_DEB]
          ,[DATE_FIN]
          ,MT_TX
      FROM  TX
    3/
    résultat attendu :
    fk_article  [DATE_DEB] [DATE_FIN] prix
    Comme j'ai précisés avant prix = prix x + prix y + prix z selon les périodes.

    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
    2/ SELECT   FK_ARTICLE,
    case 
    ---TARIF SEUL--
    when (DEBTF < DEBRD  and DEBTF < DEBTX  and DFINTF < DEBRD and and DFINTF < DEBTX) OR 
    (DFINTF < DEBTX and DEBRD IS NULL ) OR (DEBRD is null and DFINTF < DEBTX) or ( DFINTF < DEBRD and DFINTF < DEBTX) 
      THEN PR_TARIF
    ---1 REM + TAXE-------
    when ((DEBTF between DEBRD and FINRD) and FINRD < DFINTF  and DEBTF >= DEBTX ) THEN  PR_TARIF +MT_TX - MT_REM 
    when ((DEBTF > FINRD)   and DEBTF >= DEBTX )  THEN PR_TARIF +MT_TX
    when (DEBTF > FINRD  and DEBTF >= DEBTX ) 
    THEN  PR_TARIF +MT_TX 
    end as PRIX
     
    from tab1 
    inner join  tab2 on  ..
    inner join tab3 on ...
    ici j'ai traité des cas simples.
    L'insertion dans une table c'est pas un problème,l'essentiel que j'y arrive au résultat du calcul.

    J'espère que ces clair.
    cordialement.

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

Discussions similaires

  1. Intersection entre segment et cercle
    Par chadliii dans le forum Mathématiques
    Réponses: 15
    Dernier message: 03/10/2019, 18h52
  2. Algo intersection de 2 segments
    Par julian_ross dans le forum Développement 2D, 3D et Jeux
    Réponses: 29
    Dernier message: 25/03/2011, 12h33
  3. Intersection de segments !
    Par j.lebowski dans le forum Général Java
    Réponses: 1
    Dernier message: 03/02/2009, 15h31
  4. Réponses: 3
    Dernier message: 22/06/2008, 16h06
  5. Intersection d'un segment et d'un AABB
    Par casafa dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 05/07/2007, 17h21

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