1

基本 SQL 问题——我是新手,所以请多多包涵……

我正在尝试以这种方式加入两个领域:

“买家”表:

Name    Date
Greg    Jan 01
John    Jan 01
Greg    Jan 02

“采购”表:

Name    Date     Product    Qty
Greg    Jan 01   Apple      2
Greg    Jan 01   Banana     3
John    Jan 01   Apple      2
Greg    Jan 02   Banana     1

联表:

Name   Date    Apples   Bananas
Greg   Jan 01  2        3
John   Jan 01  2        0
Greg   Jan 02  0        1

我知道它必须是简单的东西,但我就是不明白。

4

3 回答 3

1

看起来你正在尝试pivot你的结果。sum您可以使用with实现此目的case

select b.name, 
    b.date, 
    sum(case when product='Apple' then qty end) Apples,
    sum(case when product='Banana' then qty end) Bananas
from buyers b
    join purchases p on b.name = p.name and b.date = p.date
group by b.name, 
    b.date
于 2013-10-18T00:54:10.103 回答
0

坦率地说,您的数据库结构非常正确。
但是,您从这两个表中得到的结果在逻辑上和概念上都是错误的。

首先,您不能将行数据放入列名,除非您正在聚合它。
行总是动态的。列是静态的。
如果您的数据包含草莓和菠萝怎么办。
即使您确定它只包含“Apples”和“Bananas”的数据,如果有错字并且其中一个值变成“Bannana”怎么办。那么您将无法从中获得准确的结果。

您的案例的逻辑数据结构应包含三个表,“Buyers”、“Purchases”和“Products”。
但是,无论您产生这种结果的原因是什么,最接近的可能结果只是将“买家”和“产品”列 分组,并汇总产品数量。

但无论如何,请尝试此查询...对于您的情况,这是最接近的。

SELECT B.Name, P.Date, P.Product, SUM(P.Qty)
FROM Buyers B, Purchases P
WHERE B.Name = P.Name
ORDER BY B.Name
GROUP BY B.Name, P.Product

通过这种方式,您可以知道哪些买家购买了哪些产品,以及他们购买的每种产品的总数量。

祝您好运...

于 2013-10-18T01:39:15.150 回答
0

如果加入的表名称为“buyer_purchases”,则 sql 如下所示:

select buyer_purchases.*,Purchases.* from buyer_purchases,Purchases where buyer_purchases.Name=Purchases.Name and buyer_purchases.Date=Purchases.Date;

于 2013-10-18T00:55:10.477 回答