2016-06-30 7 views
0

結合クエリでSELECTクエリにスタックしています。私はVB.netとSQL Server Express x86(SQL Server 12.0.2269)を使ってVisual Studio 2015、asp.netを開発しています。結合テーブルのsqlカウントはGROUP BYでエラーを返します

これはテーブルです:

Products 

- Id (PK, int, not null) 
- Number (varchar(20), not null) 
- CategoryId (int, not null) 
- Name (varchar(50), not null) 
- Description (text, not null) 
- IsActive (bit, not null) 
- Stock (int, not null) 
- SetColors (bit, not null) 
- SetSizes (bit, not null) 
- MakeId (FK, int, null) 
- StockTypeId (FK, int, not null) 

Groups 

- Id (PK, FK, int, not null) 
- Name (varchar(50), not null) 
- Description (text, null) 
- Picture (image, null) 

ProductGroups 

- Id (PK, int, not null) 
- ProductId (FK, int, not null) 
- GroupId (FK, int, not null) 

各製品がProductGroupsテーブルに保持されているものを、1つ以上のグループに属することができます。

Groups.Id、Groups.Name、Groups.Picture、およびデータバインドasp:ListViewに表示する各グループに属する製品の数を選択するためのクエリが必要です。

は集計関数またはGROUP BY句に含まれていないため、これまで何をしようとしても名前と画像の列にエラーが表示されます。

私は解決策についてインターネットで検索しています。これは私が試した最後のクエリです:

SELECT g.Id, g.Name, g.Picture, COUNT(DISTINCT pg.ProductId) as numProd 
FROM Groups g 
LEFT JOIN ProductGroups pg ON g.Id = pg.GroupId 
GROUP BY g.Id, g.Name, g.Picture, pg.ProductId 

私は集約関数は、私はvarchar型またはNULL可能イメージフィールド上で使用すべきかわからないし、画像上でのグループ化が許可されていないか」text、ntext、およびimageデータIS NULLまたはLIKE演算子を使用している場合を除いて、型を比較またはソートすることはできません。 ")。

私はこれを解決する手助けをすることができます誰ですか?

また、StockTypeId、MakeId、CategoryId、isActiveおよびStockをフィルタリングする必要があります。しかし、それは最初のステップがうまくいくはずです。

答えて

1

:あなたの答えのための

SELECT g.Id, g.Name, g.Picture, pg.pg_count 
FROM Groups g 
JOIN (Select GroupId, Count(*) as pg_count 
    FROM ProductGroups Group By GroupId) pg on g.Id = pg.GroupId 
+0

ありがとう!これはトリックです。私は今日sometingを学んだ! –

+0

名前や説明フィールドでグループ分けしていると、何か間違ったことが起こっている可能性があります。 –

0

あなたのテーブルの関係に問題がある場合を除き、これは、動作するはずです:私はこのクエリは、トリックを行うだろうと思い

SELECT g.Id, g.Name, g.Picture, COUNT(DISTINCT pg.ProductId) asnumProd FROM Groups g LEFT JOIN ProductGroups pg ON g.Id = pg.GroupId GROUP BY g.Id, g.Name, g.Picture

+0

おかげで。このクエリを実行すると、_Msg 306、Level 16、State 2、Line 3のエラーが再び発生します.IS NULLまたはLIKE演算子を使用している場合を除いて、text、ntext、およびimageデータ型を比較またはソートすることはできません。 私は私の関係をチェックする必要があります、彼らはエンティティフレームワークによって作成されました。 –

+0

ああg.Pictureはあなたをオフに投げている –

+0

写真のデータが必要ですか? –