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 04/02/2011, 09h22   #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 des intervalles de date

Je souhaite créer une table permettant le calcul d'un indice à chaque modification des dates.
indice = x + y + z , x et y et z ont chacune une date début et une date fin.
la base de calcul est x (qui est tarif). Par exemple:

Citation:
x : 2008/15/01 .....2008/29/01
y: 2008/10/01 ......2008/18/01
z: 2008/25/01.......2008/29/01
Je veux avoir comme sortie dans la nouvelle table:
Citation:
2008/15/01.... 2008/18/01 un indice1
2008/18/01....2008/25/01 un indice 2
2008/25/01....2008/29/01 un indice3
j'ai pas d'idée comment aboutir à la solution? est ce que des composants SSIS peuvent me faciliter le tâche ou je peux y arriver avec des requêtes et un simple chargement.
AJ_ing est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2011, 10h35   #2
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,

Bonjour <--(j'en ai un en plus, je te le donne )

Je ne suis pas sur d'avoir bien compris ton problème, et avec la DDL de ta table, ca aurait été plus facile. Il n'aurait pas été inutile de donner quelques précisions sur le but de tout ca, mais je pense que tu peux faire ca en une requete effectivement, en t'inspirant de ceci :

Code sql :
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
 
DECLARE @t TABLE(
	id CHAR(1),
	debut DATE, 
	fin DATE
)
 
INSERT INTO @t VALUES('x','2008-01-15','2008-01-29')
	, ('y', '2008-01-10', '2008-01-18')
	,('z','2008-01-25','2008-01-29')
 
 
 
;WITH dte AS(
	SELECT debut
	FROM @t t1
	UNION 
	SELECT fin
	FROM @t
),
dteOK AS (
	SELECT dte.debut, ROW_NUMBER() OVER(ORDER BY dte.debut) AS RN
	FROM dte
	INNER JOIN @t t
		ON dte.debut BETWEEN t.debut AND t.fin
	WHERE t.id = 'x'
)
SELECT d1.debut AS debut, d2.debut AS fin, d1.RN AS Indice
FROM dteOK d1
INNER JOIN dteOK d2 ON d1.RN  = d2.RN

Par contre, créer une autre table me semble une mauvaise idée, crée plutôt une vue à partir de ta requete !
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2011, 15h26   #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,
bon,j'ai pas bien saisi votre idée.
Mon problème c'est le calcul dans différents intervalles et à chaque intervalle une ligne s'ajoute c'à d :
Ma source de données est une table comme suit :
pk debx finx x deby finy y debz finz z
1 2008/15/01 2008/29/01 2008/10/01 2008/18/01 2008/25/01 2008/29/01
....................................................................................................
x, y et z sont des prix et non pas des indices de ligne.
Résultat pour ce cas est :
deb fin prix
2008/15/01.... 2008/18/01 x+y
2008/18/01....2008/25/01 x
2008/25/01....2008/29/01 x+z

le prix en résultat doit toujours contenir x et lui ajouter le prix y ou/et z
si elle sont dans le même intervalle,si non j'affiche x avec les dates correspondantes!!!


merci.
AJ_ing est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h12.


 
 
 
 
Partenaires

Hébergement Web