ID が一意または主キーの場合、代替ソリューションは次のようになります。
SELECT tn.ID, tn.Cat, tn.Product -- or just tn.* if all columns are to be selected
FROM
(
SELECT ID = MIN(ID)
FROM TableName
GROUP BY CAT
) x
INNER JOIN TableName tn ON
x.ID = tn.ID
ネストされた 'x' クエリは、一意のカテゴリ CAT ごとに最小の ID を選択し、内部結合は必要な ID を持つ TableName から行を返します。
元の答え。
これで、「列の値を同じ元の行から取得したい場合にすべきでないこと」と読む必要があります。下部の例は、データがどのように混合されるかを示すように変更されました。
Group By を使用する場合、TSQL では、使用するすべての列を GROUP BY 句にリストするか、集計関数 (MIN、MAX、AVG、COUNT など) 内に配置する必要があります。
したがって、どの列を区別する必要があるか、どの列を集計関数内に配置する必要があるか、どの集計関数が目的に適しているかを選択する必要があります。
列を区別する必要がありCAT
ます-GROUP BYする必要があります。
ID 列と PRODUCT 列はいかなる条件にも制約されないため、それらを集計する場合があります。すべての集計関数のうち、MIN と MAX のみが目的に合っています。これらの関数は、適用される列の型を変更しないためです。
あなたの例から、ID列は常に最小値を取得するため、最良のオプションはMINを使用することです.
PRODUCT については、MIN または MAX の両方を使用できます。現在の例に違いはありません。
SELECT MIN(Id), Cat, MAX(Product)
FROM TableName
GROUP BY Cat
使い方:
ID CAT PRODUCT ID CAT PRODUCT
================= ================
1 21 Product1 1 21 -- 1 is minimums for CAT 21
2 21 Product2 Product2 -- Product2 is maximum for CAT 21
----------------- ----------------
3 23 Product2 3 23 Product2 -- Only one row for CAT 23
----------------- ----------------
4 24 Product3 4 24 -- 4 is minimum for CAT 24
5 24 Product5 Product5 -- Product5 is maximum for CAT 24
----------------- ----------------
6 25 Product4 6 25 -- 6 is minimum for CAT 25
7 25 Product6 Product6 -- Product6 is maximum for CAT 25
したがって、結果は次のようになります。
ID CAT PRODUCT
=================
1 21 Product2
3 23 Product2
4 24 Product5
6 25 Product6
できるように、CAT は区別されますが、列の値は行間で混在しています。