2016-04-30 7 views
0

productdownloadの2つのテーブルがあります。2つのテーブルを使用してSQL Serverで1つのレポートを取得する

  • product(PRODUCT_ID(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へようこそ! –

答えて

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

テーブルとプライマリキーに問題があります。

このような表を作成します。 製品(PRODUCT_ID(PK)、名前、verion) ダウンロード(日付、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のアイデアを使って、もう一度やり直していないいくつかの変更を行いました –

関連する問題