2016-04-30 69 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的想法和瘋狂的一些變化,不再工作 –

相關問題