使用两个表在SQL Server中获取一个报表

时间:2016-04-30 01:10:55

标签: sql sql-server

我有两个表,productdownload,如下所示。

  • product(product_id(pk),product_name)
  • download(download_date(pk),download_version(pk),product_id(pk,fk))

我需要一份报告,以显示每月下载的产品数量,以及每月产品的版本。

SELECT 
    [product_name],
    [version],
    MONTH(download_date) AS [Month],
    COUNT(MONTH(download_date)) AS [Count]  
FROM
    product 
INNER JOIN 
    download ON product.product_id = download.product_id 
GROUP BY 
    MONTH(download_date)

我收到此错误

  

列'product.product_name'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。

2 个答案:

答案 0 :(得分:1)

  1. 使用表的别名以提高可读性。
  2. 提及SELECT中的aliasname.columnname以避免获取错误的值。
  3. 除了GROUP BY中的聚合值外,您错过了其他列。
  4. 因此下面的查询将返回结果。

    SELECT P.[product_name],
          P.[version],
          MONTH(D.download_date) AS [Month],
          COUNT(MONTH(D.download_date)) AS [Count]  
    FROM product P
    INNER JOIN download D ON D.product_id = P.product_id 
    GROUP BY P.[product_name], P.[version], MONTH(D.download_date)
    

答案 1 :(得分:-2)

表格和主键存在问题。

像这样创建表。 产品展示(产品(PK),姓名,优化版本) 下载(日期,PRODUCT_ID)

并运行此查询

SELECT product.name,product.version,COUNT(download.product_id) 
FROM product INNER JOIN download ON product.product_id=download.download_id 
Group BY(download._productid);

我认为这就是你想要的,如果不发布重播,我将在回到堆叠时回答。