Bonjour,
J'essaie d'écrire une requête sans passer par des curseurs mais je ne sais
pas si je peux obtenir le résultat que je souhaite.
J'ai 3 tables CLIENTS, FACTURE,LIGNE_FACTURE
Je fais un
select r.cliID, r.client, sum(r.ht) as ht from
(
SELECT
fl.FLIG_ID as ligneFactID
,fl.FACT_ID as factID
,fl.FLIG_TOTALHT as ht
,c.CLIE_ID as cliID
,c.CLIE_NOM as client
from facture_ligne fl
inner join facture f on f.FACT_ID=fl.FACT_ID
inner join client c on c.CLIE_ID=f.CLIE_ID
where fl... (là les critères varient)
) r
group by r.CLIID,r.client
Ce que j'aimerais obtenir c'est une colonne supplémentaire dans le résultat
final avec, par client, les id des lignes de factures (concaténés)
retournées par la requete
Quelque chose du genre
select r.cliID, r.client, sum(r.ht) as ht, idLignes =(1,23,45,567,...) from
...
CE qui donnerait comme résultat
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Med Bouchenafa
Voici un code que j'ai pondu sur la base Northwind (J'ai cependant ajouté une table OrderDetails ayant la meme structure que [Order Details] mais avec OrderDetailsID comme IDENTITY)
Toute l'astuce est dans la creation d'une fonction qui te retourne la liste des lignes de factures pour une facture donnée CREATE FUNCTION dbo.get_FactureDetails (@FactureID AS int) RETURNS VARCHAR(1000) AS BEGIN DECLARE @strQuery AS VARCHAR(1000) SET @strQuery = ''
SELECT @strQuery = @strQuery + CAST(OrderDetailsID AS varchar(8)) + ',' FROM dbo.OrderDetails WHERE OrderID = @FactureID
RETURN @strQuery END GO
SELECT Client = C.ContactName, Total = SUM( UnitPrice * Quantity), "Nbre de lignes" = COUNT( D.ProductID), List = dbo.get_FactureDetails(O.OrderID) FROM dbo.Customers C INNER JOIN dbo.Orders O ON C.CustomerID = O.CustomerID INNER JOIN dbo.[Order Details] D ON O.OrderID = D.OrderID GROUP BY ContactName, dbo.get_FactureDetails(O.OrderID)
Bien cordialement Med Bouchenafa
"jack" wrote in message news:e9K$
Bonjour, J'essaie d'écrire une requête sans passer par des curseurs mais je ne sais pas si je peux obtenir le résultat que je souhaite. J'ai 3 tables CLIENTS, FACTURE,LIGNE_FACTURE
Je fais un
select r.cliID, r.client, sum(r.ht) as ht from ( SELECT fl.FLIG_ID as ligneFactID ,fl.FACT_ID as factID ,fl.FLIG_TOTALHT as ht ,c.CLIE_ID as cliID ,c.CLIE_NOM as client
from facture_ligne fl inner join facture f on f.FACT_ID=fl.FACT_ID inner join client c on c.CLIE_ID=f.CLIE_ID
where fl... (là les critères varient) ) r
group by r.CLIID,r.client
Ce que j'aimerais obtenir c'est une colonne supplémentaire dans le résultat final avec, par client, les id des lignes de factures (concaténés) retournées par la requete
Quelque chose du genre
select r.cliID, r.client, sum(r.ht) as ht, idLignes =(1,23,45,567,...) from ... CE qui donnerait comme résultat
Voici un code que j'ai pondu sur la base Northwind
(J'ai cependant ajouté une table OrderDetails ayant la meme structure que
[Order Details] mais avec OrderDetailsID comme IDENTITY)
Toute l'astuce est dans la creation d'une fonction qui te retourne la liste
des lignes de factures pour une facture donnée
CREATE FUNCTION dbo.get_FactureDetails (@FactureID AS int)
RETURNS VARCHAR(1000)
AS
BEGIN
DECLARE @strQuery AS VARCHAR(1000)
SET @strQuery = ''
SELECT @strQuery = @strQuery + CAST(OrderDetailsID AS varchar(8)) + ','
FROM dbo.OrderDetails
WHERE OrderID = @FactureID
RETURN @strQuery
END
GO
SELECT Client = C.ContactName,
Total = SUM( UnitPrice * Quantity),
"Nbre de lignes" = COUNT( D.ProductID),
List = dbo.get_FactureDetails(O.OrderID)
FROM dbo.Customers C INNER JOIN dbo.Orders O ON C.CustomerID = O.CustomerID
INNER JOIN dbo.[Order Details] D ON
O.OrderID = D.OrderID
GROUP BY ContactName, dbo.get_FactureDetails(O.OrderID)
Bien cordialement
Med Bouchenafa
"jack" <jack@lcbd.fr> wrote in message
news:e9K$nGOuJHA.1240@TK2MSFTNGP02.phx.gbl...
Bonjour,
J'essaie d'écrire une requête sans passer par des curseurs mais je ne sais
pas si je peux obtenir le résultat que je souhaite.
J'ai 3 tables CLIENTS, FACTURE,LIGNE_FACTURE
Je fais un
select r.cliID, r.client, sum(r.ht) as ht from
(
SELECT
fl.FLIG_ID as ligneFactID
,fl.FACT_ID as factID
,fl.FLIG_TOTALHT as ht
,c.CLIE_ID as cliID
,c.CLIE_NOM as client
from facture_ligne fl
inner join facture f on f.FACT_ID=fl.FACT_ID
inner join client c on c.CLIE_ID=f.CLIE_ID
where fl... (là les critères varient)
) r
group by r.CLIID,r.client
Ce que j'aimerais obtenir c'est une colonne supplémentaire dans le
résultat
final avec, par client, les id des lignes de factures (concaténés)
retournées par la requete
Quelque chose du genre
select r.cliID, r.client, sum(r.ht) as ht, idLignes =(1,23,45,567,...)
from
...
CE qui donnerait comme résultat
Voici un code que j'ai pondu sur la base Northwind (J'ai cependant ajouté une table OrderDetails ayant la meme structure que [Order Details] mais avec OrderDetailsID comme IDENTITY)
Toute l'astuce est dans la creation d'une fonction qui te retourne la liste des lignes de factures pour une facture donnée CREATE FUNCTION dbo.get_FactureDetails (@FactureID AS int) RETURNS VARCHAR(1000) AS BEGIN DECLARE @strQuery AS VARCHAR(1000) SET @strQuery = ''
SELECT @strQuery = @strQuery + CAST(OrderDetailsID AS varchar(8)) + ',' FROM dbo.OrderDetails WHERE OrderID = @FactureID
RETURN @strQuery END GO
SELECT Client = C.ContactName, Total = SUM( UnitPrice * Quantity), "Nbre de lignes" = COUNT( D.ProductID), List = dbo.get_FactureDetails(O.OrderID) FROM dbo.Customers C INNER JOIN dbo.Orders O ON C.CustomerID = O.CustomerID INNER JOIN dbo.[Order Details] D ON O.OrderID = D.OrderID GROUP BY ContactName, dbo.get_FactureDetails(O.OrderID)
Bien cordialement Med Bouchenafa
"jack" wrote in message news:e9K$
Bonjour, J'essaie d'écrire une requête sans passer par des curseurs mais je ne sais pas si je peux obtenir le résultat que je souhaite. J'ai 3 tables CLIENTS, FACTURE,LIGNE_FACTURE
Je fais un
select r.cliID, r.client, sum(r.ht) as ht from ( SELECT fl.FLIG_ID as ligneFactID ,fl.FACT_ID as factID ,fl.FLIG_TOTALHT as ht ,c.CLIE_ID as cliID ,c.CLIE_NOM as client
from facture_ligne fl inner join facture f on f.FACT_ID=fl.FACT_ID inner join client c on c.CLIE_ID=f.CLIE_ID
where fl... (là les critères varient) ) r
group by r.CLIID,r.client
Ce que j'aimerais obtenir c'est une colonne supplémentaire dans le résultat final avec, par client, les id des lignes de factures (concaténés) retournées par la requete
Quelque chose du genre
select r.cliID, r.client, sum(r.ht) as ht, idLignes =(1,23,45,567,...) from ... CE qui donnerait comme résultat
SELECT Client = C.ContactName, Commande = O.OrderID, List = D.a FROM dbo.Customers C INNER JOIN dbo.Orders O ON C.CustomerID = O.CustomerID CROSS APPLY( SELECT CAST(X.OrderDetailsID AS VARCHAR(8)) + ',' FROM dbo.OrderDetails X WHERE X.OrderID = O.OrderID FOR XML PATH('') ) D (a)
Je me suis bien amusé....
Bien cordialement Med Bouchenafa
"jack" wrote in message news:e9K$
Bonjour, J'essaie d'écrire une requête sans passer par des curseurs mais je ne sais pas si je peux obtenir le résultat que je souhaite. J'ai 3 tables CLIENTS, FACTURE,LIGNE_FACTURE
Je fais un
select r.cliID, r.client, sum(r.ht) as ht from ( SELECT fl.FLIG_ID as ligneFactID ,fl.FACT_ID as factID ,fl.FLIG_TOTALHT as ht ,c.CLIE_ID as cliID ,c.CLIE_NOM as client
from facture_ligne fl inner join facture f on f.FACT_ID=fl.FACT_ID inner join client c on c.CLIE_ID=f.CLIE_ID
where fl... (là les critères varient) ) r
group by r.CLIID,r.client
Ce que j'aimerais obtenir c'est une colonne supplémentaire dans le résultat final avec, par client, les id des lignes de factures (concaténés) retournées par la requete
Quelque chose du genre
select r.cliID, r.client, sum(r.ht) as ht, idLignes =(1,23,45,567,...) from ... CE qui donnerait comme résultat
SELECT Client = C.ContactName,
Commande = O.OrderID,
List = D.a
FROM dbo.Customers C INNER JOIN dbo.Orders O ON C.CustomerID = O.CustomerID
CROSS APPLY( SELECT
CAST(X.OrderDetailsID AS VARCHAR(8)) + ','
FROM
dbo.OrderDetails X
WHERE
X.OrderID = O.OrderID
FOR XML
PATH('')
) D (a)
Je me suis bien amusé....
Bien cordialement
Med Bouchenafa
"jack" <jack@lcbd.fr> wrote in message
news:e9K$nGOuJHA.1240@TK2MSFTNGP02.phx.gbl...
Bonjour,
J'essaie d'écrire une requête sans passer par des curseurs mais je ne sais
pas si je peux obtenir le résultat que je souhaite.
J'ai 3 tables CLIENTS, FACTURE,LIGNE_FACTURE
Je fais un
select r.cliID, r.client, sum(r.ht) as ht from
(
SELECT
fl.FLIG_ID as ligneFactID
,fl.FACT_ID as factID
,fl.FLIG_TOTALHT as ht
,c.CLIE_ID as cliID
,c.CLIE_NOM as client
from facture_ligne fl
inner join facture f on f.FACT_ID=fl.FACT_ID
inner join client c on c.CLIE_ID=f.CLIE_ID
where fl... (là les critères varient)
) r
group by r.CLIID,r.client
Ce que j'aimerais obtenir c'est une colonne supplémentaire dans le
résultat
final avec, par client, les id des lignes de factures (concaténés)
retournées par la requete
Quelque chose du genre
select r.cliID, r.client, sum(r.ht) as ht, idLignes =(1,23,45,567,...)
from
...
CE qui donnerait comme résultat
SELECT Client = C.ContactName, Commande = O.OrderID, List = D.a FROM dbo.Customers C INNER JOIN dbo.Orders O ON C.CustomerID = O.CustomerID CROSS APPLY( SELECT CAST(X.OrderDetailsID AS VARCHAR(8)) + ',' FROM dbo.OrderDetails X WHERE X.OrderID = O.OrderID FOR XML PATH('') ) D (a)
Je me suis bien amusé....
Bien cordialement Med Bouchenafa
"jack" wrote in message news:e9K$
Bonjour, J'essaie d'écrire une requête sans passer par des curseurs mais je ne sais pas si je peux obtenir le résultat que je souhaite. J'ai 3 tables CLIENTS, FACTURE,LIGNE_FACTURE
Je fais un
select r.cliID, r.client, sum(r.ht) as ht from ( SELECT fl.FLIG_ID as ligneFactID ,fl.FACT_ID as factID ,fl.FLIG_TOTALHT as ht ,c.CLIE_ID as cliID ,c.CLIE_NOM as client
from facture_ligne fl inner join facture f on f.FACT_ID=fl.FACT_ID inner join client c on c.CLIE_ID=f.CLIE_ID
where fl... (là les critères varient) ) r
group by r.CLIID,r.client
Ce que j'aimerais obtenir c'est une colonne supplémentaire dans le résultat final avec, par client, les id des lignes de factures (concaténés) retournées par la requete
Quelque chose du genre
select r.cliID, r.client, sum(r.ht) as ht, idLignes =(1,23,45,567,...) from ... CE qui donnerait comme résultat
SELECT Client = C.ContactName, Commande = O.OrderID, List = D.a FROM dbo.Customers C INNER JOIN dbo.Orders O ON C.CustomerID O.CustomerID CROSS APPLY( SELECT CAST(X.OrderDetailsID AS VARCHAR(8)) + ',' FROM dbo.OrderDetails X WHERE X.OrderID = O.OrderID FOR XML PATH('') ) D (a)
Je me suis bien amusé....
Bien cordialement Med Bouchenafa
"jack" wrote in message news:e9K$ > Bonjour, > J'essaie d'écrire une requête sans passer par des curseurs mais je ne
sais
> pas si je peux obtenir le résultat que je souhaite. > J'ai 3 tables CLIENTS, FACTURE,LIGNE_FACTURE > > Je fais un > > select r.cliID, r.client, sum(r.ht) as ht from > ( > SELECT > fl.FLIG_ID as ligneFactID > ,fl.FACT_ID as factID > ,fl.FLIG_TOTALHT as ht > ,c.CLIE_ID as cliID > ,c.CLIE_NOM as client > > from facture_ligne fl > inner join facture f on f.FACT_ID=fl.FACT_ID > inner join client c on c.CLIE_ID=f.CLIE_ID > > where fl... (là les critères varient) > ) r > > group by r.CLIID,r.client > > Ce que j'aimerais obtenir c'est une colonne supplémentaire dans le > résultat > final avec, par client, les id des lignes de factures (concaténés) > retournées par la requete > > Quelque chose du genre > > select r.cliID, r.client, sum(r.ht) as ht, idLignes =(1,23,45,567,...) > from > ... > CE qui donnerait comme résultat > > cliID client ht
"Med Bouchenafa" <com.hotmail@bouchenafa> wrote in message
news:14867A88-ABC5-41A0-9B63-77D94BD756D3@microsoft.com...
Voici une solution encore plus elegante
SELECT Client = C.ContactName,
Commande = O.OrderID,
List = D.a
FROM dbo.Customers C INNER JOIN dbo.Orders O ON C.CustomerID O.CustomerID
CROSS APPLY( SELECT
CAST(X.OrderDetailsID AS VARCHAR(8)) + ','
FROM
dbo.OrderDetails X
WHERE
X.OrderID = O.OrderID
FOR XML
PATH('')
) D (a)
Je me suis bien amusé....
Bien cordialement
Med Bouchenafa
"jack" <jack@lcbd.fr> wrote in message
news:e9K$nGOuJHA.1240@TK2MSFTNGP02.phx.gbl...
> Bonjour,
> J'essaie d'écrire une requête sans passer par des curseurs mais je ne
sais
> pas si je peux obtenir le résultat que je souhaite.
> J'ai 3 tables CLIENTS, FACTURE,LIGNE_FACTURE
>
> Je fais un
>
> select r.cliID, r.client, sum(r.ht) as ht from
> (
> SELECT
> fl.FLIG_ID as ligneFactID
> ,fl.FACT_ID as factID
> ,fl.FLIG_TOTALHT as ht
> ,c.CLIE_ID as cliID
> ,c.CLIE_NOM as client
>
> from facture_ligne fl
> inner join facture f on f.FACT_ID=fl.FACT_ID
> inner join client c on c.CLIE_ID=f.CLIE_ID
>
> where fl... (là les critères varient)
> ) r
>
> group by r.CLIID,r.client
>
> Ce que j'aimerais obtenir c'est une colonne supplémentaire dans le
> résultat
> final avec, par client, les id des lignes de factures (concaténés)
> retournées par la requete
>
> Quelque chose du genre
>
> select r.cliID, r.client, sum(r.ht) as ht, idLignes =(1,23,45,567,...)
> from
> ...
> CE qui donnerait comme résultat
>
> cliID client ht
SELECT Client = C.ContactName, Commande = O.OrderID, List = D.a FROM dbo.Customers C INNER JOIN dbo.Orders O ON C.CustomerID O.CustomerID CROSS APPLY( SELECT CAST(X.OrderDetailsID AS VARCHAR(8)) + ',' FROM dbo.OrderDetails X WHERE X.OrderID = O.OrderID FOR XML PATH('') ) D (a)
Je me suis bien amusé....
Bien cordialement Med Bouchenafa
"jack" wrote in message news:e9K$ > Bonjour, > J'essaie d'écrire une requête sans passer par des curseurs mais je ne
sais
> pas si je peux obtenir le résultat que je souhaite. > J'ai 3 tables CLIENTS, FACTURE,LIGNE_FACTURE > > Je fais un > > select r.cliID, r.client, sum(r.ht) as ht from > ( > SELECT > fl.FLIG_ID as ligneFactID > ,fl.FACT_ID as factID > ,fl.FLIG_TOTALHT as ht > ,c.CLIE_ID as cliID > ,c.CLIE_NOM as client > > from facture_ligne fl > inner join facture f on f.FACT_ID=fl.FACT_ID > inner join client c on c.CLIE_ID=f.CLIE_ID > > where fl... (là les critères varient) > ) r > > group by r.CLIID,r.client > > Ce que j'aimerais obtenir c'est une colonne supplémentaire dans le > résultat > final avec, par client, les id des lignes de factures (concaténés) > retournées par la requete > > Quelque chose du genre > > select r.cliID, r.client, sum(r.ht) as ht, idLignes =(1,23,45,567,...) > from > ... > CE qui donnerait comme résultat > > cliID client ht