2

次のようなデータを含む 2 つの列を持つテーブルがあります。

1,2
1,3
1,4
2,1
2,2
3,1

ユニークな組み合わせだけを選択したいので、最終的には次のようになります。

1,2
1,3
1,4
2,2

1,2 は 2,1 などと同じ組み合わせなので

SQL ステートメントでそれを行うにはどうすればよいでしょうか。

実際には、私のテーブルには 3 番目の列があり、その 3 番目の列に基づいて where 句を追加して、それらの行のみが考慮されるようにしたいと考えています。

4

4 に答える 4

10
SELECT * FROM (
    SELECT
        CASE WHEN Col1 <= Col2 THEN Col1 ELSE Col2 END AS Col1,
        CASE WHEN Col1 <= Col2 THEN Col2 ELSE Col1 END AS Col2
    FROM
        MyTable
) Ordered
GROUP BY
    Col1, Col2

GROUP式をing することにより、サブクエリなしで実行できますがCASE、読むのに時間がかかります。

于 2012-10-19T14:50:23.443 に答える
7

同じことを達成する別の方法:

SELECT a, b
FROM tableX
WHERE a <= b
  AND (other conditions)

UNION 

SELECT b, a
FROM tableX 
WHERE a > b 
  AND (other conditions) ;

このバリエーションは、使用しているインデックスに応じて (効率に関して) 異なる場合があります。

SELECT *
FROM
  ( SELECT a, b
    FROM tableX
    WHERE (other conditions)
  UNION 
    SELECT b, a
    FROM tableX 
    WHERE (other conditions)
  ) AS tmp
WHERE a <= b ;
于 2012-10-19T15:10:40.620 に答える
-1

次のようなものを試すことができます:

select distinct col1, col2 from table
where col2 + '-' + col1 not in (select col1 + '-' + col2 from your_table)

フィールドを連結する必要があり、それは列の型に依存することに注意してください (col1 + '-' + col2 は char および varchar 型でうまく機能します)

于 2012-10-19T14:49:56.313 に答える
-9

どうですか:

SELECT
      COL1, COL2, COUNT(*)
FROM
     Your_Table
GROUP BY
      COL1, COL2
于 2012-10-19T14:43:33.863 に答える