結合クエリで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をフィルタリングする必要があります。しかし、それは最初のステップがうまくいくはずです。
ありがとう!これはトリックです。私は今日sometingを学んだ! –
名前や説明フィールドでグループ分けしていると、何か間違ったことが起こっている可能性があります。 –