繁体   English   中英

如何使用sql从四个sql表中显示rdlc中的销售摘要

[英]how to show sales summary in rdlc from four sql table using sql

我很难生成一个rdlc报告,以便以我的客户端给出的预定义格式显示报告。

客户给定的格式 输出格式

你可以注意到RED背景是我的问题区域,项目“A”的价格已经改变了三倍。 因此显示他们的销售,破损和退款数量。 我有4个表产品,SalesLog,Breakages,SalesReturn。 产品表包含物料的最新(当前)价格,但SalesLog,Breakages和SalesReturn表包含销售,破损和销售退货时的价格。 我已经为SalesLog,Breakges和SalesReturn编写了查询,根据ProductCode,Price和Quantity显示行。 但我不明白我如何合并他们(4表输出)输出以显示下面的结果。

查询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]

查询破损

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]

查询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]

产品表

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]

任何人都可以帮助我,或建议任何技巧来实现这一目标。

提前致谢.....

从查看您的数据开始,这只是我的头脑。 我想我只需要提取一个“Code”,“Item”,“Price”的唯一列表,然后使用这个唯一列表对每个查询(Sales,Breakage,Return)进行LEFT JOIN。 如果值为null,则可以使用coalesce将值默认为0,并且可以使用final where子句删除所有三个结果为零的记录(除非您希望显示在给定的任何内容中没有执行任何操作)价钱)。

以下几行中有什么用处吗? (给我一个或两个方括号,因为我在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]

最后,我在ServerFault.co上提出的一个问题,由于他们的管理员移动到StackOverFlow.com,我得到了一个我认为很容易得到的答案(至少对我而言)。 请不要介意那些帮助我的人。 这个查询正在做我想要的。

感谢所有人的支持(尤其是STACKOVERFLOW.COM

点击这里查看答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM