如何使用t-sql显示销售报告中的价格变化

时间:2010-07-15 06:57:34

标签: c# tsql rdlc

我有两个表Products和SalesLog,

SalesLog表

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]

产品表

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]

在我的 RDLC 报告中,我必须显示不同商品的销售报告。现在的问题是我根据日期范围显示报告(例如2010年1月1日至2010年3月15日dd / mm / yyyy),在此期间,项目价格可能会多次变化。所以我也必须展示那些价格变化。例如

Sales Report for the date 01/01/2010 to 15/03/2010

ItemName    Price   Quantity   Total
  A          $1       2          $2
  A          $1.20    5          $6
  A          $1.10    5          $5.50
  B          $5       1          $5

正如您在上面的示例中所看到的,项目“A”的价格已经改变了两次,因此我必须显示该期间以特定价格出售的数量。我的产品表包含项目的最新价格(pPrice列),SalesLog表包含计费时的项目价格(价格列)。

我尝试了很多,但没有附近的地方,任何人都可以帮助我使用任何其他技术的T-SQL查询来实现我的目标。

非常感谢..............

1 个答案:

答案 0 :(得分:2)

您是否希望获得示例A中的数据?如果是这样,这应该有效;

DECLARE @StartDate DATETIME ,
    @EndDate DATETIME

SELECT  @StartDate = '01 Jan 2010' ,
        @EndDate = '15 Mar 2010'

SELECT  [Products].pName AS ItemName,
        SalesLog.[Price] AS Price ,
        COUNT(*)AS Quantity ,
        SUM(SalesLog.[Price]) AS Total
FROM    SalesLog
        JOIN [Products] ON [Products].pCode = SalesLog.ProductCode /*Check this join - I'm not sure what your relationship is*/
WHERE   BillDate >= @StartDate
        AND BillDate < @EndDate + 1
GROUP BY [Products].pName ,
        SalesLog.[Price]