基本的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
我知道它必须是简单的,但我只是没有得到它。
答案 0 :(得分:1)
您似乎正在尝试pivot
您的搜索结果。您可以使用sum
与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
答案 1 :(得分:0)
如果已加入表名'buyer_purchases',那么sql看起来像:
select buyer_purchases.*,Purchases.* from buyer_purchases,Purchases where buyer_purchases.Name=Purchases.Name and buyer_purchases.Date=Purchases.Date;
答案 2 :(得分:0)
坦率地说,您的数据库结构完全正确。
但是,从这两个表中得到的结果在逻辑上和概念上都是错误的。
首先,您不能将行数据放入列名中,除非您正在聚合它。
行总是动态的。列是静态的。
如果您的数据包含草莓和菠萝,该怎么办?
即使你确定它只包含'苹果'和'香蕉'的数据,如果有拼写错误,其中一个值变为'Bannana'。那么你将无法从中得到准确的结果。
您案例的逻辑数据结构应包含三个表,“买方”,“购买”和“产品”。
但是,无论您产生此类结果的原因是什么,最接近的结果只是分组'买方'和'产品'列,并汇总产品数量。
但无论如何,试试这个查询...这是你的情况最接近的。
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
通过这种方式,您可以了解哪些买家购买了哪些产品,以及他们购买的每种产品的总数量。
祝你好运......