2012-11-07 38 views
0

對大小寫不敏感的排序規則(如SQL_Latin1_General_CP1_CI_AS)使用不同的查詢將檢索任何不區分大小寫的行的第一個匹配項。SQL - 不區分大小寫的排序規則查詢 - 檢索小寫行而不是第一個行

但我想檢索小寫,如果兩種情況都存在。

如果數據中只有一種情況存在,我想檢索該情況。 (死刑案件獨特的出現應該留在死刑案件中的結果集)

表:

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. 使用區分大小寫排序

回答

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 
+0

即使有多列也可以工作! – djmj

+0

所以,如果你覺得它有用,可能你會接受一個答案 –

+0

嘿,別擔心。這個問題在起作用,從那時起我一直沒有這麼做,而且我不能100%確定min函數是否存在任何缺點。在接下來的幾天工作中必須重新檢查它。然後我會接受它。 – djmj

0

像這樣的東西應該從1選擇使用區分大小寫的排序規則(奇怪的是自動排序,幾乎使用情況下,我想!)

  • 選擇所有不同值做到這一點:

    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 
    ; 
    
  • +0

    如果我刪除DESC它適用於一列。雖然這樣的任務看起來相當複雜。我的想法與兩次使用整理子查詢不起作用,SQL禁止兩次整理(也許使用視圖)。但是,當我想在多列上添加第二列到「PARTITION BY」和「ORDER BY」時,它不起作用。 – djmj

    相關問題