2010-07-19 11 views
3

J'ai de mauvais moments pour générer un rapport rdlc pour afficher le rapport au format prédéfini donné par mon client.comment afficher le récapitulatif des ventes dans rdlc à partir de la table de quatre sql en utilisant sql

client format donné Output format http://i29.tinypic.com/4t9g7b.jpg

Comme vous pouvez le remarquer sur fond rouge est ma zone de problème, article « A » prix a été changé trois fois. Et en conséquence leurs ventes, bris et quantité de remboursement sont montrés. J'ai 4 tables Produits, SalesLog, Breakages, SalesReturn. La table des produits se compose du dernier prix (courant) d'un article, mais les tableaux SalesLog, Breakages et SalesReturn se composent du prix au moment des ventes, des ruptures et du retour des ventes. J'ai écrit des requêtes pour SalesLog, Breakges et SalesReturn qui montre les rangées selon ProductCode, Price et Quantity. Mais je ne comprends pas comment je peux fusionner leur sortie (4 tables de sortie) pour montrer le résultat ci-dessous.

requête pour SalesLog

SELECT [Products].pCode AS Code, 
    [Products].pName AS Item, 
    SalesLog.[Price] AS Price , 
    COUNT(*)AS Quantity , 
    SUM(SalesLog.[Price]) AS Total 
FROM SalesLog 
    INNER JOIN [Products] ON [Products].pCode = SalesLog.ProductCode 
WHERE BillDate = '07/01/2010' 
GROUP BY [Products].pCode,[Products].pName , 
    SalesLog.[Price] 

requête pour la casse

SELECT [Products].pCode AS Code, 
    [Products].pName AS Item, 
    Breakages.[Price] AS Price , 
    COUNT(*)AS Quantity , 
    SUM(Breakages.[Price]) AS Total 
FROM Breakages 
    INNER JOIN [Products] ON [Products].pCode = Breakages.ProductCode 
WHERE BillDate = '07/01/2010' 
GROUP BY [Products].pCode,[Products].pName , 
    Breakages.[Price] 

requête pour SalesReturn

SELECT [Products].pCode AS Code, 
    [Products].pName AS Item, 
    Breakages.[Price] AS Price , 
    COUNT(*)AS Quantity , 
    SUM(Breakages.[Price]) AS Total 
FROM Breakages 
    INNER JOIN [Products] ON [Products].pCode = Breakages.ProductCode 
WHERE BillDate = '07/01/2010' 
GROUP BY [Products].pCode,[Products].pName , 
    Breakages.[Price] 

Produit Tableau

CREATE TABLE [dbo].[Products](
    [ProductId] [int] IDENTITY(1,1) NOT NULL, 
    [pName] [nvarchar](30) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, 
    [pSize] [int] NULL, 
    [pPrice] [decimal](10, 2) NULL, 
    [pPackQty] [int] NULL, 
    [pGroup] [int] NULL, 
    [pCode] [int] NULL, 
    [OpenStock] [int] NULL, 
    [CloseStock] [int] NULL, 
    [YrlyOpenStock] [int] NULL, 
CONSTRAINT [PK_Products] PRIMARY KEY CLUSTERED 
( 
    [ProductId] ASC 
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY] 
) ON [PRIMARY] 

Quelqu'un peut-il me aider ou de suggérer une astuce pour y parvenir.

merci à l'avance .....

Répondre

2

Ceci est juste à côté du haut de ma tête de regarder vos données. Je pense que je devrais sortir une liste unique de "Code", "Article", "Prix" et ensuite utiliser cette liste unique à LEFT JOIN contre chacune de vos requêtes (Ventes, Rupture, Retour). Vous pouvez utiliser un coalesce pour mettre les valeurs par défaut à 0 si elles sont nulles, et vous pouvez utiliser une clause finale pour supprimer tous les enregistrements qui ont zéro pour les trois résultats (sauf si vous voulez montrer qu'il n'y a rien fait à un moment donné prix).

+0

Merci pour votre aide –

2

Est-ce que quelque chose dans les lignes suivantes serait utile? (Donner ou prendre un crochet ou deux car je ne suis pas génial sur SQL Server).

SELECT [Products].pCode AS Code, 
     [Products].pName AS Item, 
     SLO.[Price]  AS Price, 
     (SELECT COUNT(*) 
      FROM SalesLog SL 
      WHERE SL.ProductCode = SLO.ProductCode AND 
       SL.Billdate = SLO.BillDate) AS SalesQty, 
     (SELECT SUM(SL.Price) 
      FROM SalesLog SL 
      WHERE SL.ProductCode = SLO.ProductCode AND 
       SL.Billdate = SLO.BillDate) AS SalesValue, 
     (SELECT COUNT(*) 
      FROM Breakages 
      WHERE Breakages.ProductCode = SLO.ProductCode AND 
        Breakages.BillDate = SLO.BillDate) AS BreakageQty, 
     ...etc... 

FROM SalesLog SLO INNER JOIN [Products] ON [Products].pCode = SLO.ProductCode 
    WHERE BillDate = '07/01/2010' 
    GROUP BY [Products].pCode, 
      [Products].pName , 
      SLO.[Price] 
1

Enfin une question que je posais le ServerFault.co, m qui a déménagé à StackOverFlow.com par leur administrateur a obtenu une réponse que je pense est facile à obtenir (pour moi au moins). S'il vous plaît ne me dérange pas ces gars qui m'a aidé. cette requête fait ce que je voulais.

Merci à tous pour leur soutien (en particulier STACKOVERFLOW.COM)

Click here to view answer