0

我有一个包含 3 个表的数据库:

  1. mothlist([number],[name])
  2. temp_subs([sub_id],[date_created],[expiry_date])
  3. temp_orders([order_id],[sub_id],[order_date])

我正在尝试编写一个查询来获取按月分组的当年的总计数到期日期和订单。

我现在的查询是:

SELECT 
    monthlist.name 'Month',
    count(temp_subs.expiry_date) 'Expiry Date',
    count(temp_orders.order_date) 'Order Date'    
FROM 
    monthlist  
    FULL JOIN temp_subs 
    on 
        monthlist.number = datepart(month, temp_subs.expiry_date) and 
        datepart(year, temp_subs.expiry_date) = year(getdate())
    FULL JOIN temp_orders 
    on 
        monthlist.number = datepart(month, temp_orders.order_date) and 
        datepart(year, temp_orders.order_date) = year(getdate())
GROUP BY monthlist.number ,monthlist.name      
ORDER BY monthlist.number

如果有人能告诉我我在这里做错了什么,我将不胜感激。

4

1 回答 1

1

双连接意味着每个 temp_sub 对每个 temp_order 都重复。避免重复计算的一种方法是distinct在唯一列上添加 a。如果表有一个名为 的主键id,则可能如下所示:

SELECT monthlist.name 'Month'
  ,count(distinct temp_subs.id) 'Expiry Date'
  ,count(distinct temp_orders.id) 'Order Date'  
于 2012-08-27T12:06:37.777 回答