2010-10-04 35 views
14

我有一個表格,它起源於大小寫敏感的舊式遺留系統,特別是狀態列,其中's'='Schedule import'和'S'='進度管理「。這張表最終進入了我可以查詢的SQL Server 2000數據庫。我的查詢相對簡單,只是爲了統計...強制T-SQL查詢在MS中區分大小寫

Select trans_type, count(1) from mytable group by trans_type 

這是將「S」與「s」計數一起計數的組合。有什麼辦法強制查詢是敏感的嗎?我有權訪問SQL Server 2000和2005環境來運行它,但是服務器上的管理能力有限(所以我無法設置服務器屬性)......我想我可以將數據移動到本地並設置我的地方我可以完全訪問服務器選項,但更喜歡tsql解決方案。

+0

'alter database your_database collat​​e Latin1_General_CS_AS' – pascal 2010-10-04 21:14:39

+1

SQL Server 2003 ??我只知道2000年,2005年,2008年,2008年R2 .... – 2010-10-05 05:18:38

+0

不幸的是缺乏改變表pascal的權限,雖然我認爲這將工作 – Twelfth 2010-10-05 16:04:40

回答

25
select trans_type collate SQL_Latin1_General_CP1_CS_AS, count(*) 
from mytable 
group by trans_type collate SQL_Latin1_General_CP1_CS_AS 

您可以=like,等運營商,以及做到這一點。請注意,您必須修改選擇列表,因爲您不再按trans_type分組,您現在正在按trans_type collate SQL_Latin1_General_CP1_CS_AS分組。有點困難。

+0

最好的解決方案,我可以看到它是否工作...謝謝伊恩 – Twelfth 2010-10-05 16:11:20

1

您可以引入一個trans_type_ascii列,其中包含trans_type和group的ascii值嗎?或者可以使用任何其他列(isUpperCase)來區分它們。

+0

謝謝貝絲。我不能改變現有的表,但創建一個臨時表並加載ascii值...可以工作。表中還有其他資本值與小值(例如T和t)......我不知道一個案例陳述是否可以處理它。作爲僞代碼,當type ='T'的情況下,當caseuppercase(type)= 1時,則'T'else't'。我會嘗試anbd看看會發生什麼 – Twelfth 2010-10-05 16:08:22