代码之家  ›  专栏  ›  技术社区  ›  Raj

如何使用sql从四个sql表在rdlc中显示sales summary

  •  3
  • Raj  · 技术社区  · 14 年前

    客户端给定格式 Output format

    正如你可以注意到红色背景是我的问题领域,项目“A”的价格已经改变了三次。相应地,他们的销售,破损和退款数量显示。我有4个表产品,销售日志,破损,退货。产品表包括一个项目的最新(当前)价格,但SalesLog、Breakages和SalesReturn表包括销售时的价格、Breakages和SalesReturn。我已经编写了SalesLog、breakes和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查询

    选择[Products].pCode作为代码,
    [Products].pName作为项目,
    破损[价格]作为价格,
    总计(破损[价格])
    从破碎中
    其中BillDate='07/01/2010'
    破损[价格]
    

    产品表

    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]
    

    有谁能帮我,或者给我出点什么窍门。

    提前谢谢。。。。。

    3 回复  |  直到 5 年前
        1
  •  2
  •   Zachary    14 年前

    从你的数据来看,这是我脑子里想不出来的。我想我只需要拿出一个唯一的“代码”、“项目”、“价格”列表,然后使用这个唯一的列表左键联接您的每个查询(销售、破损、退货)。如果值为null,可以使用coalesce将其默认为0,并且可以使用final where子句删除所有三个结果都为零的任何记录(除非您希望显示在给定的价格下没有执行任何操作)。

        2
  •  2
  •   Brian Hooper    14 年前

    (举一个或两个方括号,因为我对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]
    
        3
  •  1
  •   Community datashaman    4 年前

    最后,我在ServerFault.co上问了一个问题,这个问题被他们的管理员转移到了StackOverFlow.com上,得到了一个我认为很容易得到的答案(至少对我来说)。请不要介意那些帮助我的人。这是我想要的。

    STACKOVERFLOW.COM网站 )

    Click here to view answer