Bonjour,
Je sèche actuellement sur une commande (ms-)sql qui me paraissait simple. Si
quelqu'un peut m'aider.
J'utilise 2 tables :
- une table entête
- une table détail : pour chaque enregistrement d'entête, je peux avoir de 0
à n enregistrements de détails
Jusque là, pas de quoi fouetter un chat.
Je souhaite une commande qui me récupère toutes les lignes d'entêtes et le
PREMIER enregistrement de détail. Si il n'y a pas de détail, je veux quand
même les données d'entête.
Donc, le résultat doit ramener autant de lignes que d'enregistrements
d'entête.
Merci d'avance,
Eric
Bonjour,
Je sèche actuellement sur une commande (ms-)sql qui me paraissait simple. Si
quelqu'un peut m'aider.
J'utilise 2 tables :
- une table entête
- une table détail : pour chaque enregistrement d'entête, je peux avoir de 0
à n enregistrements de détails
Jusque là, pas de quoi fouetter un chat.
Je souhaite une commande qui me récupère toutes les lignes d'entêtes et le
PREMIER enregistrement de détail. Si il n'y a pas de détail, je veux quand
même les données d'entête.
Donc, le résultat doit ramener autant de lignes que d'enregistrements
d'entête.
Merci d'avance,
Eric
Bonjour,
Je sèche actuellement sur une commande (ms-)sql qui me paraissait simple. Si
quelqu'un peut m'aider.
J'utilise 2 tables :
- une table entête
- une table détail : pour chaque enregistrement d'entête, je peux avoir de 0
à n enregistrements de détails
Jusque là, pas de quoi fouetter un chat.
Je souhaite une commande qui me récupère toutes les lignes d'entêtes et le
PREMIER enregistrement de détail. Si il n'y a pas de détail, je veux quand
même les données d'entête.
Donc, le résultat doit ramener autant de lignes que d'enregistrements
d'entête.
Merci d'avance,
Eric
Bonjour,
Je sèche actuellement sur une commande (ms-)sql qui me paraissait simple.
Si quelqu'un peut m'aider.
J'utilise 2 tables :
- une table entête
- une table détail : pour chaque enregistrement d'entête, je peux avoir de
0 à n enregistrements de détails
Jusque là, pas de quoi fouetter un chat.
Je souhaite une commande qui me récupère toutes les lignes d'entêtes et le
PREMIER enregistrement de détail. Si il n'y a pas de détail, je veux quand
même les données d'entête.
Donc, le résultat doit ramener autant de lignes que d'enregistrements
d'entête.
Merci d'avance,
Eric
Bonjour,
Je sèche actuellement sur une commande (ms-)sql qui me paraissait simple.
Si quelqu'un peut m'aider.
J'utilise 2 tables :
- une table entête
- une table détail : pour chaque enregistrement d'entête, je peux avoir de
0 à n enregistrements de détails
Jusque là, pas de quoi fouetter un chat.
Je souhaite une commande qui me récupère toutes les lignes d'entêtes et le
PREMIER enregistrement de détail. Si il n'y a pas de détail, je veux quand
même les données d'entête.
Donc, le résultat doit ramener autant de lignes que d'enregistrements
d'entête.
Merci d'avance,
Eric
Bonjour,
Je sèche actuellement sur une commande (ms-)sql qui me paraissait simple.
Si quelqu'un peut m'aider.
J'utilise 2 tables :
- une table entête
- une table détail : pour chaque enregistrement d'entête, je peux avoir de
0 à n enregistrements de détails
Jusque là, pas de quoi fouetter un chat.
Je souhaite une commande qui me récupère toutes les lignes d'entêtes et le
PREMIER enregistrement de détail. Si il n'y a pas de détail, je veux quand
même les données d'entête.
Donc, le résultat doit ramener autant de lignes que d'enregistrements
d'entête.
Merci d'avance,
Eric
Bonjour,
Eric Hourant a écrit:Bonjour,
Je sèche actuellement sur une commande (ms-)sql qui me paraissait simple.
Si quelqu'un peut m'aider.
Un ordre SQL SELECT suffit
J'utilise 2 tables :
- une table entête
- une table détail : pour chaque enregistrement d'entête, je peux avoir
de 0 à n enregistrements de détails
La notion d'"enregistrement" n'existe pas dans les SGBDR. On parle de
lignes.
Jusque là, pas de quoi fouetter un chat.
Je souhaite une commande qui me récupère toutes les lignes d'entêtes et
le PREMIER enregistrement de détail. Si il n'y a pas de détail, je veux
quand même les données d'entête.
Donc, le résultat doit ramener autant de lignes que d'enregistrements
d'entête.
Vous n'avez pas indiqué le modèle des données....
CREATE TABLE T_MAITRE_MTR
(MTR_ID INTEGER NOT NULL PRIMARY KEY,
MTR_INFO VARCHAR(16))
GO
CREATE TABLE T_DETAIL_DTL
(DTL_ID INTEGER NOT NULL PRIMARY KEY,
MTR_ID INTEGER FOREIGN KEY REFERENCES T_MAITRE_MTR (MTR_ID),
DTL_LIBELLE VARCHAR(16))
GO
INSERT INTO T_MAITRE_MTR VALUES (1, 'Paul')
INSERT INTO T_MAITRE_MTR VALUES (2, 'Jacques')
INSERT INTO T_MAITRE_MTR VALUES (4, 'Pierre')
INSERT INTO T_MAITRE_MTR VALUES (7, 'Jean')
GO
INSERT INTO T_DETAIL_DTL VALUES (101, 7, 'Armoire')
INSERT INTO T_DETAIL_DTL VALUES (102, 7, 'Buffet')
INSERT INTO T_DETAIL_DTL VALUES (105, 7, 'Canapé')
INSERT INTO T_DETAIL_DTL VALUES (104, 4, 'Lit')
INSERT INTO T_DETAIL_DTL VALUES (103, 1, 'Table')
INSERT INTO T_DETAIL_DTL VALUES (108, 1, 'Chaise')
GO
SELECT *
FROM T_MAITRE_MTR M
LEFT OUTER JOIN T_DETAIL_DTL D
ON M.MTR_ID = D.MTR_ID
WHERE DTL_ID = (SELECT MAX(DTL_ID)
FROM T_DETAIL_DTL
WHERE MTR_ID = M.MTR_ID)
OR DTL_ID IS NULL
GO
MTR_ID MTR_INFO DTL_ID MTR_ID DTL_LIBELLE
----------- ---------------- ----------- ----------- ----------------
1 Paul 108 1 Chaise
2 Jacques NULL NULL NULL
4 Pierre 104 4 Lit
7 Jean 105 7 Canapé
Vous pouvez remplacer MAX par MIN dans la sous requête...
Pour comprende le SQL :
1) mon site SQLpro : http://sqlpro.developpez.com/
2) mes bouquins : SQL développement, SQL Synthex !
A +
Merci d'avance,
Eric
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Bonjour,
Eric Hourant a écrit:
Bonjour,
Je sèche actuellement sur une commande (ms-)sql qui me paraissait simple.
Si quelqu'un peut m'aider.
Un ordre SQL SELECT suffit
J'utilise 2 tables :
- une table entête
- une table détail : pour chaque enregistrement d'entête, je peux avoir
de 0 à n enregistrements de détails
La notion d'"enregistrement" n'existe pas dans les SGBDR. On parle de
lignes.
Jusque là, pas de quoi fouetter un chat.
Je souhaite une commande qui me récupère toutes les lignes d'entêtes et
le PREMIER enregistrement de détail. Si il n'y a pas de détail, je veux
quand même les données d'entête.
Donc, le résultat doit ramener autant de lignes que d'enregistrements
d'entête.
Vous n'avez pas indiqué le modèle des données....
CREATE TABLE T_MAITRE_MTR
(MTR_ID INTEGER NOT NULL PRIMARY KEY,
MTR_INFO VARCHAR(16))
GO
CREATE TABLE T_DETAIL_DTL
(DTL_ID INTEGER NOT NULL PRIMARY KEY,
MTR_ID INTEGER FOREIGN KEY REFERENCES T_MAITRE_MTR (MTR_ID),
DTL_LIBELLE VARCHAR(16))
GO
INSERT INTO T_MAITRE_MTR VALUES (1, 'Paul')
INSERT INTO T_MAITRE_MTR VALUES (2, 'Jacques')
INSERT INTO T_MAITRE_MTR VALUES (4, 'Pierre')
INSERT INTO T_MAITRE_MTR VALUES (7, 'Jean')
GO
INSERT INTO T_DETAIL_DTL VALUES (101, 7, 'Armoire')
INSERT INTO T_DETAIL_DTL VALUES (102, 7, 'Buffet')
INSERT INTO T_DETAIL_DTL VALUES (105, 7, 'Canapé')
INSERT INTO T_DETAIL_DTL VALUES (104, 4, 'Lit')
INSERT INTO T_DETAIL_DTL VALUES (103, 1, 'Table')
INSERT INTO T_DETAIL_DTL VALUES (108, 1, 'Chaise')
GO
SELECT *
FROM T_MAITRE_MTR M
LEFT OUTER JOIN T_DETAIL_DTL D
ON M.MTR_ID = D.MTR_ID
WHERE DTL_ID = (SELECT MAX(DTL_ID)
FROM T_DETAIL_DTL
WHERE MTR_ID = M.MTR_ID)
OR DTL_ID IS NULL
GO
MTR_ID MTR_INFO DTL_ID MTR_ID DTL_LIBELLE
----------- ---------------- ----------- ----------- ----------------
1 Paul 108 1 Chaise
2 Jacques NULL NULL NULL
4 Pierre 104 4 Lit
7 Jean 105 7 Canapé
Vous pouvez remplacer MAX par MIN dans la sous requête...
Pour comprende le SQL :
1) mon site SQLpro : http://sqlpro.developpez.com/
2) mes bouquins : SQL développement, SQL Synthex !
A +
Merci d'avance,
Eric
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Bonjour,
Eric Hourant a écrit:Bonjour,
Je sèche actuellement sur une commande (ms-)sql qui me paraissait simple.
Si quelqu'un peut m'aider.
Un ordre SQL SELECT suffit
J'utilise 2 tables :
- une table entête
- une table détail : pour chaque enregistrement d'entête, je peux avoir
de 0 à n enregistrements de détails
La notion d'"enregistrement" n'existe pas dans les SGBDR. On parle de
lignes.
Jusque là, pas de quoi fouetter un chat.
Je souhaite une commande qui me récupère toutes les lignes d'entêtes et
le PREMIER enregistrement de détail. Si il n'y a pas de détail, je veux
quand même les données d'entête.
Donc, le résultat doit ramener autant de lignes que d'enregistrements
d'entête.
Vous n'avez pas indiqué le modèle des données....
CREATE TABLE T_MAITRE_MTR
(MTR_ID INTEGER NOT NULL PRIMARY KEY,
MTR_INFO VARCHAR(16))
GO
CREATE TABLE T_DETAIL_DTL
(DTL_ID INTEGER NOT NULL PRIMARY KEY,
MTR_ID INTEGER FOREIGN KEY REFERENCES T_MAITRE_MTR (MTR_ID),
DTL_LIBELLE VARCHAR(16))
GO
INSERT INTO T_MAITRE_MTR VALUES (1, 'Paul')
INSERT INTO T_MAITRE_MTR VALUES (2, 'Jacques')
INSERT INTO T_MAITRE_MTR VALUES (4, 'Pierre')
INSERT INTO T_MAITRE_MTR VALUES (7, 'Jean')
GO
INSERT INTO T_DETAIL_DTL VALUES (101, 7, 'Armoire')
INSERT INTO T_DETAIL_DTL VALUES (102, 7, 'Buffet')
INSERT INTO T_DETAIL_DTL VALUES (105, 7, 'Canapé')
INSERT INTO T_DETAIL_DTL VALUES (104, 4, 'Lit')
INSERT INTO T_DETAIL_DTL VALUES (103, 1, 'Table')
INSERT INTO T_DETAIL_DTL VALUES (108, 1, 'Chaise')
GO
SELECT *
FROM T_MAITRE_MTR M
LEFT OUTER JOIN T_DETAIL_DTL D
ON M.MTR_ID = D.MTR_ID
WHERE DTL_ID = (SELECT MAX(DTL_ID)
FROM T_DETAIL_DTL
WHERE MTR_ID = M.MTR_ID)
OR DTL_ID IS NULL
GO
MTR_ID MTR_INFO DTL_ID MTR_ID DTL_LIBELLE
----------- ---------------- ----------- ----------- ----------------
1 Paul 108 1 Chaise
2 Jacques NULL NULL NULL
4 Pierre 104 4 Lit
7 Jean 105 7 Canapé
Vous pouvez remplacer MAX par MIN dans la sous requête...
Pour comprende le SQL :
1) mon site SQLpro : http://sqlpro.developpez.com/
2) mes bouquins : SQL développement, SQL Synthex !
A +
Merci d'avance,
Eric
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
La notion d'"enregistrement" n'existe pas dans les SGBDR. On parle de
lignes.<<
Pour comprende le SQL : 1) mon site SQLpro : http://sqlpro.developpez.com/
Bonjour,
Eric Hourant a écrit:Bonjour,
Je sèche actuellement sur une commande (ms-)sql qui me paraissait simple.
Si quelqu'un peut m'aider.
Un ordre SQL SELECT suffit
J'utilise 2 tables :
- une table entête
- une table détail : pour chaque enregistrement d'entête, je peux avoir
de 0 à n enregistrements de détails
La notion d'"enregistrement" n'existe pas dans les SGBDR. On parle de
lignes.
Jusque là, pas de quoi fouetter un chat.
Je souhaite une commande qui me récupère toutes les lignes d'entêtes et
le PREMIER enregistrement de détail. Si il n'y a pas de détail, je veux
quand même les données d'entête.
Donc, le résultat doit ramener autant de lignes que d'enregistrements
d'entête.
Vous n'avez pas indiqué le modèle des données....
CREATE TABLE T_MAITRE_MTR
(MTR_ID INTEGER NOT NULL PRIMARY KEY,
MTR_INFO VARCHAR(16))
GO
CREATE TABLE T_DETAIL_DTL
(DTL_ID INTEGER NOT NULL PRIMARY KEY,
MTR_ID INTEGER FOREIGN KEY REFERENCES T_MAITRE_MTR (MTR_ID),
DTL_LIBELLE VARCHAR(16))
GO
INSERT INTO T_MAITRE_MTR VALUES (1, 'Paul')
INSERT INTO T_MAITRE_MTR VALUES (2, 'Jacques')
INSERT INTO T_MAITRE_MTR VALUES (4, 'Pierre')
INSERT INTO T_MAITRE_MTR VALUES (7, 'Jean')
GO
INSERT INTO T_DETAIL_DTL VALUES (101, 7, 'Armoire')
INSERT INTO T_DETAIL_DTL VALUES (102, 7, 'Buffet')
INSERT INTO T_DETAIL_DTL VALUES (105, 7, 'Canapé')
INSERT INTO T_DETAIL_DTL VALUES (104, 4, 'Lit')
INSERT INTO T_DETAIL_DTL VALUES (103, 1, 'Table')
INSERT INTO T_DETAIL_DTL VALUES (108, 1, 'Chaise')
GO
SELECT *
FROM T_MAITRE_MTR M
LEFT OUTER JOIN T_DETAIL_DTL D
ON M.MTR_ID = D.MTR_ID
WHERE DTL_ID = (SELECT MAX(DTL_ID)
FROM T_DETAIL_DTL
WHERE MTR_ID = M.MTR_ID)
OR DTL_ID IS NULL
GO
MTR_ID MTR_INFO DTL_ID MTR_ID DTL_LIBELLE
----------- ---------------- ----------- ----------- ----------------
1 Paul 108 1 Chaise
2 Jacques NULL NULL NULL
4 Pierre 104 4 Lit
7 Jean 105 7 Canapé
Vous pouvez remplacer MAX par MIN dans la sous requête...
Pour comprende le SQL :
1) mon site SQLpro : http://sqlpro.developpez.com/
2) mes bouquins : SQL développement, SQL Synthex !
A +
Merci d'avance,
Eric
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
La notion d'"enregistrement" n'existe pas dans les SGBDR. On parle de
lignes.<<
Pour comprende le SQL : 1) mon site SQLpro : http://sqlpro.developpez.com/
Bonjour,
Eric Hourant a écrit:
Bonjour,
Je sèche actuellement sur une commande (ms-)sql qui me paraissait simple.
Si quelqu'un peut m'aider.
Un ordre SQL SELECT suffit
J'utilise 2 tables :
- une table entête
- une table détail : pour chaque enregistrement d'entête, je peux avoir
de 0 à n enregistrements de détails
La notion d'"enregistrement" n'existe pas dans les SGBDR. On parle de
lignes.
Jusque là, pas de quoi fouetter un chat.
Je souhaite une commande qui me récupère toutes les lignes d'entêtes et
le PREMIER enregistrement de détail. Si il n'y a pas de détail, je veux
quand même les données d'entête.
Donc, le résultat doit ramener autant de lignes que d'enregistrements
d'entête.
Vous n'avez pas indiqué le modèle des données....
CREATE TABLE T_MAITRE_MTR
(MTR_ID INTEGER NOT NULL PRIMARY KEY,
MTR_INFO VARCHAR(16))
GO
CREATE TABLE T_DETAIL_DTL
(DTL_ID INTEGER NOT NULL PRIMARY KEY,
MTR_ID INTEGER FOREIGN KEY REFERENCES T_MAITRE_MTR (MTR_ID),
DTL_LIBELLE VARCHAR(16))
GO
INSERT INTO T_MAITRE_MTR VALUES (1, 'Paul')
INSERT INTO T_MAITRE_MTR VALUES (2, 'Jacques')
INSERT INTO T_MAITRE_MTR VALUES (4, 'Pierre')
INSERT INTO T_MAITRE_MTR VALUES (7, 'Jean')
GO
INSERT INTO T_DETAIL_DTL VALUES (101, 7, 'Armoire')
INSERT INTO T_DETAIL_DTL VALUES (102, 7, 'Buffet')
INSERT INTO T_DETAIL_DTL VALUES (105, 7, 'Canapé')
INSERT INTO T_DETAIL_DTL VALUES (104, 4, 'Lit')
INSERT INTO T_DETAIL_DTL VALUES (103, 1, 'Table')
INSERT INTO T_DETAIL_DTL VALUES (108, 1, 'Chaise')
GO
SELECT *
FROM T_MAITRE_MTR M
LEFT OUTER JOIN T_DETAIL_DTL D
ON M.MTR_ID = D.MTR_ID
WHERE DTL_ID = (SELECT MAX(DTL_ID)
FROM T_DETAIL_DTL
WHERE MTR_ID = M.MTR_ID)
OR DTL_ID IS NULL
GO
MTR_ID MTR_INFO DTL_ID MTR_ID DTL_LIBELLE
----------- ---------------- ----------- ----------- ----------------
1 Paul 108 1 Chaise
2 Jacques NULL NULL NULL
4 Pierre 104 4 Lit
7 Jean 105 7 Canapé
Vous pouvez remplacer MAX par MIN dans la sous requête...
Pour comprende le SQL :
1) mon site SQLpro : http://sqlpro.developpez.com/
2) mes bouquins : SQL développement, SQL Synthex !
A +
Merci d'avance,
Eric
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
La notion d'"enregistrement" n'existe pas dans les SGBDR. On parle de
lignes.<<
Pour comprende le SQL : 1) mon site SQLpro : http://sqlpro.developpez.com/
Bonjour,
Eric Hourant a écrit:Bonjour,
Je sèche actuellement sur une commande (ms-)sql qui me paraissait simple.
Si quelqu'un peut m'aider.
Un ordre SQL SELECT suffit
J'utilise 2 tables :
- une table entête
- une table détail : pour chaque enregistrement d'entête, je peux avoir
de 0 à n enregistrements de détails
La notion d'"enregistrement" n'existe pas dans les SGBDR. On parle de
lignes.
Jusque là, pas de quoi fouetter un chat.
Je souhaite une commande qui me récupère toutes les lignes d'entêtes et
le PREMIER enregistrement de détail. Si il n'y a pas de détail, je veux
quand même les données d'entête.
Donc, le résultat doit ramener autant de lignes que d'enregistrements
d'entête.
Vous n'avez pas indiqué le modèle des données....
CREATE TABLE T_MAITRE_MTR
(MTR_ID INTEGER NOT NULL PRIMARY KEY,
MTR_INFO VARCHAR(16))
GO
CREATE TABLE T_DETAIL_DTL
(DTL_ID INTEGER NOT NULL PRIMARY KEY,
MTR_ID INTEGER FOREIGN KEY REFERENCES T_MAITRE_MTR (MTR_ID),
DTL_LIBELLE VARCHAR(16))
GO
INSERT INTO T_MAITRE_MTR VALUES (1, 'Paul')
INSERT INTO T_MAITRE_MTR VALUES (2, 'Jacques')
INSERT INTO T_MAITRE_MTR VALUES (4, 'Pierre')
INSERT INTO T_MAITRE_MTR VALUES (7, 'Jean')
GO
INSERT INTO T_DETAIL_DTL VALUES (101, 7, 'Armoire')
INSERT INTO T_DETAIL_DTL VALUES (102, 7, 'Buffet')
INSERT INTO T_DETAIL_DTL VALUES (105, 7, 'Canapé')
INSERT INTO T_DETAIL_DTL VALUES (104, 4, 'Lit')
INSERT INTO T_DETAIL_DTL VALUES (103, 1, 'Table')
INSERT INTO T_DETAIL_DTL VALUES (108, 1, 'Chaise')
GO
SELECT *
FROM T_MAITRE_MTR M
LEFT OUTER JOIN T_DETAIL_DTL D
ON M.MTR_ID = D.MTR_ID
WHERE DTL_ID = (SELECT MAX(DTL_ID)
FROM T_DETAIL_DTL
WHERE MTR_ID = M.MTR_ID)
OR DTL_ID IS NULL
GO
MTR_ID MTR_INFO DTL_ID MTR_ID DTL_LIBELLE
----------- ---------------- ----------- ----------- ----------------
1 Paul 108 1 Chaise
2 Jacques NULL NULL NULL
4 Pierre 104 4 Lit
7 Jean 105 7 Canapé
Vous pouvez remplacer MAX par MIN dans la sous requête...
Pour comprende le SQL :
1) mon site SQLpro : http://sqlpro.developpez.com/
2) mes bouquins : SQL développement, SQL Synthex !
A +
Merci d'avance,
Eric
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************