0

COLUMN_1 のみを選択すると、データベースに適切な量の 8 行が取得されます。これは、重複する行とそれが必要なものを提供しないためです。

SELECT DISTINCT COLUMN_1
FROM TABLE
WHERE COLUMN_3=12;

しかし、COLUMN_1とCOLUMN_2の両方を選択すると、データベースに53行が表示され、それは私が望むものではありません...

SELECT DISTINCT COLUMN_1,COLUMN_2
FROM TABLE
WHERE COLUMN_3=12;

で2つの列を選択するとdistinct、2つの列の組み合わせに対して一意の値が得られることを知っています。DISTINCT最初の列だけでなく、列の組み合わせに適用されます。だから私の質問は、どうすれば両方を選択し、COLUMN_18COLUMN_2行で重複しないようにするのですか???? 追加するとすぐに、COLUMN_2必要な行が増えるため..

4

2 に答える 2

4

必要な値を決定する必要がありcolumn_2ます。

1 つの簡単な方法は次のgroup byとおりです。

SELECT COLUMN_1, min(COLUMN_2)
FROM TABLE
WHERE COLUMN_3=12
GROUP BY COLUMN_1;
于 2013-09-13T18:24:35.077 に答える
1

私はあなたの正確な要件について完全に明確ではありませんが、ここでの良い解決策は、重複を防ぎながら、重複を引き起こす列からすべての値を返す集計関数の王様を使用することです。

以下のデータ、

COLUMN1 | COLUMN2
-----------------
a       | x
b       | x
c       | y
a       | z
b       | y
a       | y

次のように表示されます。

COLUMN1 | COLUMN2
-----------------
a       | x,z,y
b       | x,y
c       | y

使用しているデータベースを指定しませんが、Oracle では、次のようなLISTAGG関数を使用できます。

SELECT COLUMN1,
       LISTAGG(COLUMN2, ',') WITHIN GROUP (ORDER BY COLUMN2) "COLUMN2_VALUES",
  FROM TABLE

Oracle を使用しておらず、これが適切なソリューションのように思われる場合は、選択した RDBMS が同様のものを提供しているかどうかを確認する価値があります。

于 2013-09-13T19:04:37.697 に答える