2016-04-30 71 views
0

我有两个表,productdownload,如下所示。使用两个表在SQL Server中获取一个报告

  • product(产品编号(PK),PRODUCT_NAME)
  • download(download_date(PK),download_version(PK),PRODUCT_ID(PK,FK))

我需要一份报告,说明如何许多下载,形成什么产品发生在每个月的哪个版本。因为它不是在聚合函数或GROUP BY子句中包含

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”在选择列表中无效。

+4

欢迎来到Stack Overflow!这是一个网站,您可以提问问题并获得有关您使用的软件遇到的问题的答案,但这不是“为我做作业”或“为我工作”网站。当你提出一个问题时,你应该包括你写的代码,你得到的具体错误或程序产生的结果,以及你期望的结果的解释。如果没有这些,我们可以做很多事情来帮助你。请编辑您的问题以显示您已完成的工作,并告诉我们代码存在哪些问题。再次,欢迎来到Stack Overflow! –

回答

1
  1. 为更好的可读性使用表的别名。
  2. 提及SELECT中的aliasname.columnname以避免提取错误的值。
  3. 您错过了GROUP BY中聚合值以外的其他列。

因此,下面的查询将返回结果。

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) 
+0

谢谢,它的工作原理。 –

-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); 

我认为这是你想要的,如果不张贴重播我会回答,当我什么回到堆栈。

+0

谢谢,但它没有工作,但我用INNER JOIN的想法和疯狂的一些变化,不再工作 –