0

大文字と小文字を区別しない照合で個別のクエリを使用すると、大文字と小文字SQL_Latin1_General_CP1_CI_ASを区別しない行の最初の出現が取得されます。

しかし、両方のケースが存在する場合は、小文字を取得したいと思います。

データに 1 つのケースしか存在しない場合、そのケースを取得したいと考えています。(大文字のケースの一意の出現は、結果セットで大文字のケースのままにする必要があります)

テーブル:

id | col1  
----------
1 | Ab  
2 | ab  
3 | cd  
4 | Cd  
5 | Ef 

クエリ:

SELECT DISTINCT [col1] COLLATE SQL_Latin1_General_CP1_CI_AS 
FROM dbo.table

取得します:Ab, cd, Ef

しかし、私は取得したい: ab, cd, Ef

希望する結果を得ることができる照合はありますか?

最初のケースではなく、小文字を優先します。

そうでない場合は、サブセレクトを使用する必要があります。

  1. 大文字と小文字を区別する照合を使用して、すべての個別の値を選択します (奇妙なことに、自動的にソートされます。ほぼ私が望んでいたユースケースです!)
  2. 大文字と小文字を区別しない照合を使用して 1 から選択
4

2 に答える 2

0

このような何かがそれを行う必要があります:

WITH cte As
(
   SELECT
      ID,
      Col1,
      ROW_NUMBER() OVER
      (
         PARTITION BY
            Col1 COLLATE SQL_Latin1_General_CP1_CI_AS
         ORDER BY
             Col1 COLLATE SQL_Latin1_General_CP1_CS_AS DESC,
             ID
      ) As RowNumber
   FROM
      dbo.Table
)
SELECT
   ID,
   Col1
FROM
   cte
WHERE
   RowNumber = 1
;
于 2012-11-07T13:33:03.563 に答える
0

このようなものかもしれません

select
    min(T.col1 collate SQL_Latin1_General_CP1_CS_AS)
from dbo.Table as T
group by T.col1 collate SQL_Latin1_General_CP1_CI_AS
于 2012-11-07T13:48:37.727 に答える