J'ai 4 tables à savoir Products, SalesLog, Breakages, SalesReturn.calculer les ventes, les remboursements et les ruptures à partir des tables SQL Server
Produits 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]
SalesLog Tableau
CREATE TABLE [dbo].[SalesLog](
[SalesID] [int] IDENTITY(1,1) NOT NULL,
[MemoNo] [int] NULL,
[ProductCode] [int] NULL,
[Quantity] [int] NULL,
[Price] [decimal](10, 2) NULL,
[pGroup] [int] NULL,
[pName] [nvarchar](30) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[pSize] [int] NULL,
[BillDate] [nchar](10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
CONSTRAINT [PK_SalesLog] PRIMARY KEY CLUSTERED
(
[SalesID] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
SalesReturn Tableau
CREATE TABLE [dbo].[SalesReturn](
[srID] [int] IDENTITY(1,1) NOT NULL,
[ProductCode] [int] NULL,
[Quantity] [int] NULL,
[pGroup] [int] NULL,
[MemoNo] [int] NULL,
[SalesmanID] [int] NULL,
[Price] [decimal](10, 2) NULL,
[JobShift] [int] NULL,
[BillDate] [nchar](10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[AddedOn] [datetime] NULL,
CONSTRAINT [PK_SalesReturn] PRIMARY KEY CLUSTERED
(
[srID] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
Ruptures Tableau
CREATE TABLE [dbo].[Breakages](
[breakId] [int] IDENTITY(1,1) NOT NULL,
[MemoNo] [int] NULL,
[SalesmanID] [int] NULL,
[ProductCode] [int] NULL,
[pName] [nvarchar](30) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[Quantity] [int] NULL,
[Price] [decimal](10, 2) NULL,
[pGroup] [int] NULL,
[JobShift] [int] NULL,
[BillDate] [nchar](10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[AddedOn] [datetime] NULL,
CONSTRAINT [PK_Breakages_1] PRIMARY KEY CLUSTERED
(
[breakId] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
Je dois générer un seul rapport pour montrer SalesLOg, SalesReturn et Ruptures de date particulière (selon la colonne BillDate de SalesLog, et Ruptures SalesReturn) en suivant modèle.
sortie Recherché
Code ItemName Price SalesQty BreakagesQty SalesReturnQty
1 A $10 50 2 2
1 A $12 150 1 10
15 X $5 56 0 2
20 Z $8 121 0 0
colonne de sortie réduite pour le bien de lire
que vous pouvez voir que le produit « A » a été répertorié deux fois à cause du changement de prix de ce produit. pour y parvenir, je l'ai écrit une requête:
SELECT SalesLog.pName, SalesLog.ProductCode, MIN(ItemGroup.gName) AS GroupName,
SalesLog.Price, SUM (SalesLog.Quantity) AS SalesQty,
SUM(SalesLog.Quantity * SalesLog.Price) AS SalesValue,
ISNULL ((SELECT SUM(Quantity) AS Expr1 FROM Breakages
WHERE (ProductCode = SalesLog.ProductCode) AND (Price = SalesLog.Price) AND
(BillDate = '07/01/2010') AND (pGroup <> 15) AND (pGroup <> 16)), 0) AS BreakQty,
ISNULL ((SELECT SUM(Quantity * Price) AS Expr1
FROM Breakages
WHERE (ProductCode = SalesLog.ProductCode) AND (Price = SalesLog.Price) AND
(BillDate = '07/01/2010') AND (pGroup <> 15) AND (pGroup <> 16)), 0) AS BreakValue,
ISNULL ((SELECT SUM(Quantity) AS Expr1
FROM SalesReturn
WHERE (ProductCode = SalesLog.ProductCode) AND (Price = SalesLog.Price) AND
(BillDate = '07/01/2010') AND (pGroup <> 15) AND (pGroup <> 16)), 0) AS ReturnQty,
ISNULL ((SELECT SUM(Quantity * Price) AS Expr1
FROM SalesReturn
WHERE (ProductCode = SalesLog.ProductCode) AND (Price = SalesLog.Price) AND
(BillDate = '07/01/2010') AND (pGroup <> 15) AND (pGroup <> 16)), 0) AS ReturnValue,
ISNULL ((SELECT SUM(Quantity) AS Expr1
FROM SalesLog
WHERE (ProductCode = Products.pCode)), 0) AS CummSales
FROM SalesLog
INNER JOIN
ItemGroup ON ItemGroup.gCode = SalesLog.pGroup AND SalesLog.pGroup = ItemGroup.gCode
INNER JOIN
Products ON Products.pCode = SalesLog.ProductCode
WHERE (SalesLog.BillDate = '07/01/2010') AND (SalesLog.pGroup <> 15) AND
(SalesLog.pGroup <> 16)
GROUP BY SalesLog.pName, SalesLog.ProductCode, SalesLog.Price, Products.pCode, Products.pPrice
ORDER BY SalesLog.ProductCode, SalesLog.pName
Mon problème avec cette requête est, il ne peut pas afficher les entrées d'articles où il n'y a pas de ventes mais il y a le retour des ventes. cette condition est donnée par mon client. Pouvez-vous m'aider à ce sujet. toute requête t-sql ou logique pour mettre en œuvre cette condition vous aidera ...
vous remercie de me portant .........
merci @ Mark Bannister, je ne peux pas dire comment vous m'avez aidé. Cette requête fait ce que je voulais. Merci beaucoup .......................................... –
Je suis content aidé. :) –