1

次のように3つのテーブルがあります。

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 でプロジェクトを実行しています。クエリ (追加) を作成しましたが、その結果が間違っている可能性があります。1 つの 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)

エラーを与えます。合計で3倍になりました。たとえば、希望する数量が 4 で、すべての product_id と同じように 12 になりました....

製品の値

(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

You can't currently get the price from the Distribution table via the product_id, because there could be many different prices stored on the Distribution table for the same product_id. There is no way of knowing which distribution price should be used with each sale, for a given product.

In the sample data you have included, all of the distribution prices for the given product are the same. Is this how you intend to design your system - that a given product will always have the same price, no matter where it is distributed? If so, remove the price from the distribution table and store it on the product table only.

On the other hand, given that your current design includes the price on the Distribution table and your query attempts to derive the sale value from the distribution price, this implies that the sale price of the product may vary by showroom. Is this how you intend to design your system - that a product will have a different sale price, depending on where it is distributed? If so, you need to be able to link each sale record to the specific Distribution where it was sold - this would mean adding the distribution_id to the Sales table.

Then again, another way of determining the sale price would be to store the sale price on the Sales record - superficially, this looks like denormalisation, but in practice prices are likely to change over time; unless you want to build a distribution history table, holding details of what prices were applicable at what times in each showroom, this would be the simplest way to record which prices were actually charged on each sale.

The reason I asked whether this was homework (including end-of-semester projects) is that any of these scenarios are reasonable simplifications of what a real-life system would look like, for academic purposes - you have to decide which one you are using / intend to use. (A real-life system would need to be more complicated.)

The reason your query is returning sales values three times higher than the actual sales value is because you are linking all Sales records for a given product to all Distributions for the same product, then summing the results - since you have three Distribution records for the product on the Sales record, you are therefore seeing three times the actual Sales value. The query can be rewritten to work correctly, but only when you decide which way you wish to store prices.

于 2013-03-30T09:33:03.603 に答える