Requète SQL

Le
Daniel Imesch
Bonjour,
Dans une table j'ai des enregistrement suivants (exemple) :

Text Date1 Date2 Date3
A 01.01.02
A 05.01.02
A 15.02.02
A 20.03.02
B 23.03.02
B 26.03.02
B 25.05.02
C 30.05.02
C 15.02.02
C 05.06.02

E je désire avois les données de cette manière

Text Date1 Date2 Date3
A 20.03.02 05.01.02 15.02.02
B 26.03.02 25.05.02
C 05.06.02 15.02.02

Est-ce possible ?

Daniel Imesch
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Fred BROUARD
Le #11718131
Bonjour,

d'abord je voudrais pousser un coup de gueule :
C'EST TRÈS CHIANT D'AIDER DES GENS QUI NE FONT PAS L'EFFFORT
DE POSTER LA DÉFINITION DE LEURS TABLES ET DE LEUR JEU DE DONNÉES
SOUS FORME D'ORDRE SQL.

C'est une marque de politesse que de le faire, pour se faire aider !!!

Ensuite, la solution :

CREATE TABLE MaTable (Text CHAR(1), Date1 DATETIME, Date2 DATETIME, Date3 DATETIME)

INSERT INTO MaTable VALUES ('A', '01.01.02', NULL, NULL )
INSERT INTO MaTable VALUES ('A', NULL, '05.01.02', NULL )
INSERT INTO MaTable VALUES ('A', NULL, NULL, '15.02.02')
INSERT INTO MaTable VALUES ('A', '20.03.02', NULL, NULL )
INSERT INTO MaTable VALUES ('B', '23.03.02', NULL, NULL )
INSERT INTO MaTable VALUES ('B', '26.03.02', NULL, NULL )
INSERT INTO MaTable VALUES ('B', NULL, '25.05.02', NULL )
INSERT INTO MaTable VALUES ('C', NULL, '30.05.02', NULL )
INSERT INTO MaTable VALUES ('C', NULL, NULL, '15.02.02')
INSERT INTO MaTable VALUES ('C', NULL, '05.06.02', NULL )

La prochaine fois essaye au moins de faire cette partie là !

SELECT Text, CAST(NULLIF(SUM(D1), 0) AS DATETIME) Date1,
CAST(NULLIF(SUM(D2), 0) AS DATETIME) Date2,
CAST(NULLIF(SUM(D3), 0) AS DATETIME) Date3
FROM
(
SELECT Text, CAST(Max(Date1) AS FLOAT) AS D1, 0 AS D2, 0 AS D3
FROM MaTable
GROUP BY Text
UNION
SELECT Text, 0, CAST(Max(Date2) AS FLOAT), 0
FROM MaTable
GROUP BY Text
UNION
SELECT Text, 0, 0, CAST(Max(Date3) AS FLOAT)
FROM MaTable
GROUP BY Text
) T
GROUP BY Text

Text Date1 Date2 Date3
---- ---------- ---------- ----------
A 2002-03-20 2002-01-05 2002-02-15
B 2002-03-26 2002-05-25 NULL
C NULL 2002-06-05 2002-02-15

(3 ligne(s) affectée(s))

Avertissement : la valeur nulle est éliminée par un agrégat ou par une autre opération définie.

A +

--
Frédéric BROUARD, MVP MS SQL Server. Expert Langage SQL / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************



Daniel Imesch a écrit:
Bonjour,
Dans une table j'ai des enregistrement suivants (exemple) :

Text Date1 Date2 Date3
A 01.01.02
A 05.01.02
A 15.02.02
A 20.03.02
B 23.03.02
B 26.03.02
B 25.05.02
C 30.05.02
C 15.02.02
C 05.06.02

E je désire avois les données de cette manière

Text Date1 Date2 Date3
A 20.03.02 05.01.02 15.02.02
B 26.03.02 25.05.02
C 05.06.02 15.02.02

Est-ce possible ?

Daniel Imesch




Steve Kass
Le #11718111
Daniel,

select
[Text],
max(Date1) as Date1,
max(Date2) as Date2,
max(Date3) as Date3
from T
group by [Text]

Steve Kass
Drew University

Daniel Imesch wrote:

Bonjour,
Dans une table j'ai des enregistrement suivants (exemple) :

Text Date1 Date2 Date3
A 01.01.02
A 05.01.02
A 15.02.02
A 20.03.02
B 23.03.02
B 26.03.02
B 25.05.02
C 30.05.02
C 15.02.02
C 05.06.02

E je désire avois les données de cette manière

Text Date1 Date2 Date3
A 20.03.02 05.01.02 15.02.02
B 26.03.02 25.05.02
C 05.06.02 15.02.02

Est-ce possible ?

Daniel Imesch






Le #11341731
j'essayerai:

update table TC set TC.date2 = (select TS.date2
from table TS
where TC.Text = TS.text
and TS.date2 is not null
),
TC.date3 = (select TS.date3
from table TS
where TC.Text = TS.text
and TS.date3 is not null
),

and TC.date1 is not null ( pour les cas A et B )

ensuite il faut faire un delete des enregistrements dont
on ne veut pas, il y a min et max qui peuvent vous aider.

du style :

delete from table where date1 not in ( select max(date1)
from table )
and date1 is not null

TC table cible
TS table Source

tester d'abord en remplaçant delete par select *

Courage et bonne humeur

-----Message d'origine-----
Bonjour,
Dans une table j'ai des enregistrement suivants


(exemple) :

Text Date1 Date2 Date3
A 01.01.02
A 05.01.02
A 15.02.02
A 20.03.02
B 23.03.02
B 26.03.02
B 25.05.02
C 30.05.02
C 15.02.02
C 05.06.02

E je désire avois les données de cette manière

Text Date1 Date2 Date3
A 20.03.02 05.01.02 15.02.02
B 26.03.02 25.05.02
C 05.06.02 15.02.02

Est-ce possible ?

Daniel Imesch


.



Daniel Imesch
Le #11341711
Merci Steve,
Cela fonctionne parfaitement
Daniel

"Steve Kass" news:
Daniel,

select
[Text],
max(Date1) as Date1,
max(Date2) as Date2,
max(Date3) as Date3
from T
group by [Text]

Steve Kass
Drew University

Daniel Imesch wrote:

>Bonjour,
>Dans une table j'ai des enregistrement suivants (exemple) :
>
>Text Date1 Date2 Date3
>A 01.01.02
>A 05.01.02
>A 15.02.02
>A 20.03.02
>B 23.03.02
>B 26.03.02
>B 25.05.02
>C 30.05.02
>C 15.02.02
>C 05.06.02
>
>E je désire avois les données de cette manière
>
>Text Date1 Date2 Date3
>A 20.03.02 05.01.02 15.02.02
>B 26.03.02 25.05.02
>C 05.06.02 15.02.02
>
>Est-ce possible ?
>
>Daniel Imesch
>
>
>
>



Daniel Imesch
Le #11341701
Bonjour Fred,
Ta remarques est pertinente. Je ferais mieux la prochaine fois.
Daniel

"Fred BROUARD" news:O8c%
Bonjour,

d'abord je voudrais pousser un coup de gueule :
C'EST TRÈS CHIANT D'AIDER DES GENS QUI NE FONT PAS L'EFFFORT
DE POSTER LA DÉFINITION DE LEURS TABLES ET DE LEUR JEU DE DONNÉES
SOUS FORME D'ORDRE SQL.

C'est une marque de politesse que de le faire, pour se faire aider !!!

Ensuite, la solution :

CREATE TABLE MaTable (Text CHAR(1), Date1 DATETIME, Date2 DATETIME,


Date3 DATETIME)

INSERT INTO MaTable VALUES ('A', '01.01.02', NULL, NULL )
INSERT INTO MaTable VALUES ('A', NULL, '05.01.02', NULL )
INSERT INTO MaTable VALUES ('A', NULL, NULL, '15.02.02')
INSERT INTO MaTable VALUES ('A', '20.03.02', NULL, NULL )
INSERT INTO MaTable VALUES ('B', '23.03.02', NULL, NULL )
INSERT INTO MaTable VALUES ('B', '26.03.02', NULL, NULL )
INSERT INTO MaTable VALUES ('B', NULL, '25.05.02', NULL )
INSERT INTO MaTable VALUES ('C', NULL, '30.05.02', NULL )
INSERT INTO MaTable VALUES ('C', NULL, NULL, '15.02.02')
INSERT INTO MaTable VALUES ('C', NULL, '05.06.02', NULL )

La prochaine fois essaye au moins de faire cette partie là !

SELECT Text, CAST(NULLIF(SUM(D1), 0) AS DATETIME) Date1,
CAST(NULLIF(SUM(D2), 0) AS DATETIME) Date2,
CAST(NULLIF(SUM(D3), 0) AS DATETIME) Date3
FROM
(
SELECT Text, CAST(Max(Date1) AS FLOAT) AS D1, 0 AS D2, 0 AS D3
FROM MaTable
GROUP BY Text
UNION
SELECT Text, 0, CAST(Max(Date2) AS FLOAT), 0
FROM MaTable
GROUP BY Text
UNION
SELECT Text, 0, 0, CAST(Max(Date3) AS FLOAT)
FROM MaTable
GROUP BY Text
) T
GROUP BY Text

Text Date1 Date2 Date3
---- ---------- ---------- ----------
A 2002-03-20 2002-01-05 2002-02-15
B 2002-03-26 2002-05-25 NULL
C NULL 2002-06-05 2002-02-15

(3 ligne(s) affectée(s))

Avertissement : la valeur nulle est éliminée par un agrégat ou par une


autre opération définie.

A +

--
Frédéric BROUARD, MVP MS SQL Server. Expert Langage SQL / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************



Daniel Imesch a écrit:
> Bonjour,
> Dans une table j'ai des enregistrement suivants (exemple) :
>
> Text Date1 Date2 Date3
> A 01.01.02
> A 05.01.02
> A 15.02.02
> A 20.03.02
> B 23.03.02
> B 26.03.02
> B 25.05.02
> C 30.05.02
> C 15.02.02
> C 05.06.02
>
> E je désire avois les données de cette manière
>
> Text Date1 Date2 Date3
> A 20.03.02 05.01.02 15.02.02
> B 26.03.02 25.05.02
> C 05.06.02 15.02.02
>
> Est-ce possible ?
>
> Daniel Imesch
>
>



Publicité
Poster une réponse
Anonyme