我正在尝试返回一个数据库行上所有帐单详细信息的列表,但我加入表格的方式似乎没有达到预期的效果,我有两个类帐单和米:
bill {billid,customername,town,postcode,dateofissue,totalamount} 米{meterid,billid,metertype,meterread,meterreaddate}
我正在尝试按如下方式进行连接:
SELECT bill as a
inner join meter as b on a.billId = b.billId
where dateOfIssue between '1 jul 2015' and '30 jun 2016'
如果账单有两种不同类型的电表,一种电表类型是白天,一种是夜晚,那么我将获得两行电费。我如何通过设置列来选择一行,以便如果metertype是night,它会出现在名为night的列标题中,如果是day,则会出现在名为day的列标题中
哪种联接类型最适合此目的?
答案 0 :(得分:4)
使用表别名很好。使用表格的缩写甚至更好。此外,您应该使用标准日期格式。
您的问题的答案是使用条件聚合:
SELECT b.billId,
SUM(CASE WHEN metertype = 'day' then metterread else 0 end) as reading_day,
SUM(CASE WHEN metertype = 'night' then metterread else 0 end) as reading_night
FROM bill b JOIN
meter m
ON b.billId = m.billId
WHERE b.dateOfIssue between '2015-07-01' and '2016-06-30'
GROUP BY b.billId;