Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Requète SQL

5 réponses
Avatar
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

5 réponses

Avatar
Fred BROUARD
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




Avatar
Steve Kass
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






Avatar
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


.



Avatar
Daniel Imesch
Merci Steve,
Cela fonctionne parfaitement
Daniel

"Steve Kass" wrote in message
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
>
>
>
>



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

"Fred BROUARD" wrote in message
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
>
>