2010-10-04 2 views
14

Ho una tabella che ha origine in un vecchio sistema legacy che era case sensitive, in particolare una colonna di stato dove 's' = 'Schedule import' e 'S' = ' Gestione degli orari '. Questa tabella si trasforma infine in un database di SQL Server 2000 a cui è possibile eseguire query. La mia domanda è relativamente semplice solo andando per i conteggi ...Forza query T-SQL con distinzione tra maiuscole e minuscole in MS

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

questo è il raggruppamento dei conteggi per 'S' insieme con i conteggi dei 'S'. C'è un modo per forzare una query a essere sensibile al limite? Ho accesso a entrambi gli ambienti di SQL Server 2000 e 2005 per eseguire questo, ma hanno una capacità di amministrazione limitata sul server (quindi non posso impostare gli attributi del server) ... Credo che potrei spostare i dati sul mio locale e impostare qualcosa su il mio locale dove ho pieno accesso alle opzioni del server, ma preferirei una soluzione tsql.

+0

'alter database tuo_database collate Latin1_General_CS_AS' – pascal

+1

SQL Server 2003 ?? So solo 2000, 2005, 2008, 2008 R2 .... –

+0

Purtroppo mancano le autorizzazioni per modificare il tavolo pascal, anche se penso che funzionerebbe – Twelfth

risposta

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 

Si può fare questo con =, like, e altri operatori pure. Si noti che è necessario modificare l'elenco di selezione perché non si sta più raggruppando per trans_type, si sta ora raggruppando per trans_type collate SQL_Latin1_General_CP1_CS_AS. Una specie di trucco.

+0

La migliore soluzione che posso vedere se funziona ... grazie Ian – Twelfth

1

È possibile introdurre una colonna trans_type_ascii con il valore ascii del trans_type e il gruppo su quello invece? O qualsiasi altra colonna che puoi usare (isUpperCase) per distinguerli.

+0

Grazie Beth. Non posso modificare le tabelle esistenti, ma creare una tabella temporanea e caricarla con i valori ascii ... che potrebbero funzionare. Ci sono altri valori captial vs small nella tabella (T e t per esempio) ... Mi chiedo se una dichiarazione del caso potrebbe gestirlo. Come codice psuedo, caso in cui type = 'T' quindi case quando isuppercase (type) = 1 then 'T' else 't'. Darò una prova e vedere cosa succede – Twelfth

Problemi correlati