Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/02/2011, 10h13   #1
Membre à l'essai
 
Inscription : février 2011
Messages : 60
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : février 2011
Messages : 60
Points : 21
Points : 21
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.
AJ_ing est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 21h21   #2
Membre éprouvé
 
Homme Hamid MIRA
Ingénieur développement logiciels
Inscription : septembre 2003
Messages : 177
Détails du profil
Informations personnelles :
Nom : Homme Hamid MIRA
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 : 177
Points : 413
Points : 413
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+
hmira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 09h13   #3
Membre à l'essai
 
Inscription : février 2011
Messages : 60
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : février 2011
Messages : 60
Points : 21
Points : 21
Bonjour,

oui merci pour ces conseils,mais je suis encore bloqué dans " il faut mettre au clair l'algorithme et écrire la fonction".!!!
AJ_ing est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 10h14   #4
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
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 !
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 10h19   #5
Membre à l'essai
 
Inscription : février 2011
Messages : 60
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : février 2011
Messages : 60
Points : 21
Points : 21
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.
AJ_ing est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 10h47   #6
Membre à l'essai
 
Inscription : février 2011
Messages : 60
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : février 2011
Messages : 60
Points : 21
Points : 21
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.
AJ_ing est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 10h52   #7
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
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 )
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 11h17   #8
Membre à l'essai
 
Inscription : février 2011
Messages : 60
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : février 2011
Messages : 60
Points : 21
Points : 21
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.
AJ_ing est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 14h34   #9
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
hé bien donnez nous la structure des 3 tables...
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 14h43   #10
Membre à l'essai
 
Inscription : février 2011
Messages : 60
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : février 2011
Messages : 60
Points : 21
Points : 21
tab1:
code dat_debut dat_fin prix1

tab2:
code dat_debut dat_fin prix2

tab3:
code dat_debut dat_fin prix3


merci
AJ_ing est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 15h29   #11
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
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, ...)
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 16h23   #12
Membre à l'essai
 
Inscription : février 2011
Messages : 60
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : février 2011
Messages : 60
Points : 21
Points : 21
oui ces dans le même contexte !!! mais j'ai pas bien exprimé mon problème,
Bref,
Source:
Code :
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 :
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.
AJ_ing est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h14.


 
 
 
 
Partenaires

Hébergement Web