1

我有三个表如下:

CREATE Table [Product]( 
[product_id] int primary key,
[name] varchar(100) not null,
[date] varchar(20) not null,
[quantity] int not null,
[stock] int not null,
[category] varchar(50) not null,
[unitPrice] int not null,
[vendor_id] int not null
)


create table [distribution](
[distribution_id] int primary key,
[showroom] varchar(50) not null,
[quantity] int not null,
[date] varchar(20) not null,
[unitPrice] int not null,
[product_id] int not null
)

create table [sales](
[sales_id] int primary key,
[product_id] int not null, 
[date] varchar(20) not null,
[time] varchar(15) not null,
[quantitiy] int not null,
[cash] int not null,
[branch] varchar(50) not null
)

现在我想做一个查询,将返回每个产品 ID

[product].product_id, 
[product].unitPrice as 'pUnitPrice', 
[product].quantity, 
[product].unitPrice*[product].quantity as "stockTotal",
SUM([sales].quantitiy) as 'salesUnit', 
[distribution].unitPrice as 'sUnitPrice',
SUM([sales].quantitiy)*[distribution].unitPrice as 'saleTotal', 
[product].quantity-SUM([sales].quantitiy) as 'balance'

我正在使用 Microsoft SQL Server 2008 R2 在 ASP.NET 中做我的项目。我做了一个查询(附加),但结果错误可能是检查一个product_id的所有数据。我非常失望...如果有人有时间请帮助我...请...

我的查询:

SELECT 
    [sales].product_id, 
    [product].unitPrice                             as 'pUnitPrice', 
    [product].quantity                              as 'stock', 
    [product].unitPrice * [product].quantity        as "stockTotal", 
    SUM([sales].quantitiy)                          as 'salesUnit',
    [distribution].unitPrice                        as 'sUnitPrice',
    SUM([sales].quantitiy)*[distribution].unitPrice as 'saleTotal',
    [product].quantity-SUM([sales].quantitiy)       as 'balance'
from sales 
JOIN product        ON sales.product_id     = product.product_id
JOIN [distribution] ON [product].product_id = [distribution].product_id 
group by [sales].product_id, 
         [product].unitPrice, 
         [product].quantity, 
         [distribution].unitPrice
order by [sales].product_id 

只有

SUM([sales].quantity)

给出错误。它只是增加了三倍。比如说,想要的数量是 4,它变成了 12,就像每个 product_id....

产品价值

(product_id, name, date ,quantity, stock, category, unitPrice, vendor_id)

(1,HP, 2013-03-15, 10, 6, 笔记本电脑, 55000, 2)

表中的值Distribution

distribution_id   showroom   quantity      date     unitPrice    product_id
      1            Ritzy1        2      2013-03-02    55000          1
      2            Ritzy2        2      2013-03-02    55000          1
      3            Ritzy3        2      2013-03-02    55000          1

表中的值Sales

 sales_id   product_id       date       time      quantitiy    cash     branch
    1           1         2013-03-29  7:26:22 PM      2   110000    Ritzy1

我的查询结果

(product_id,    pUnitPrice, stock,  stockTotal, salesUnit,  sUnitPrice, saleTotal,  balance)


(1, 50000,  10, 500000, **6**,  55000,  330000, 4)

期望的输出:

 product_id  pUnitPrice  stock  stockTotal  salesUnit  sUnitPrice  saleTotal  balance
     1         50000       10     500000        2         55000      110000      8
4

1 回答 1

0

您目前无法通过 product_id 从 Distribution 表中获取价格,因为对于相同的 product_id,Distribution 表中可能存储了许多不同的价格。对于给定的产品,没有办法知道每次销售应该使用哪个分销价格。

在您包含的示例数据中,给定产品的所有分销价格都是相同的。这是您打算如何设计您的系统的方式 - 给定的产品将始终具有相同的价格,无论它在哪里分发?如果是这样,请从分布表中删除价格并将其仅存储在产品表中。

另一方面,鉴于您当前的设计包括 Distribution 表中的价格,并且您的查询尝试从分销价格中得出销售价值,这意味着产品的销售价格可能因陈列室而异。这是您打算如何设计您的系统的方式 - 产品将具有不同的销售价格,具体取决于它的分销地点?如果是这样,您需要能够将每条销售记录链接到销售它的特定 Distribution - 这意味着将 distribution_id 添加到 Sales 表。

再说一次,确定销售价格的另一种方法是将销售价格存储在销售记录中 - 从表面上看,这看起来像非规范化,但实际上价格可能会随着时间而变化;除非您想建立一个分销历史表,其中包含每个陈列室在什么时间适用的价格的详细信息,否则这将是记录每次销售实际收取的价格的最简单方法。

我问这是否是家庭作业(包括期末项目)的原因是,出于学术目的,这些场景中的任何一个都是对现实系统外观的合理简化——你必须决定你正在使用哪个/打算使用。(现实生活中的系统需要更复杂。)

您的查询返回的销售额值比实际销售额值高三倍的原因是因为您将给定产品的所有销售记录链接到同一产品的所有分布,然后对结果求和 - 因为您有该产品的三个分布记录因此,在销售记录中,您看到的是实际销售额的三倍。可以重写查询以使其正常工作,但前提是决定要以哪种方式存储价格。

于 2013-03-30T09:33:03.603 回答