2009-01-27 7 views
2

je la déclaration suivanteTSQL: Howto ajouter un char une instruction select

SELECT id, descr from mytable 

qui retourne

1, 'Test1'
4, 'Test4'
6, 'Test6'
8, 'Test8'
22, 'test22'

maintenant, je veux l'écran pour ajouter un caractère séquentiel au premier 4 résultats ...

'A', 1 'Test1'
'B', 4 'Test4'
'C', 6, 'Test6'
'D', 8 'Test8'
'', 22, 'Test22'

Pensées?

Modifier: Préférerait un exemple SQL Server 2000 si possible.

+0

Que diriez-vous de SQL Server 2000? –

Répondre

4
SELECT CASE WHEN ROWNUMBER < 4 
      THEN CHAR(65 + ROWNUMBER - 1) 
      ELSE '' 
     AS <WHATEVER> 
     ,X.id 
     ,X.descr 
FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY <WHATEVER>) AS ROWNUMBER 
     ,id 
     ,descr 
    FROM mytable 
) AS X 

Cela dans SQL Server 2005 et versions ultérieures.

Dans SQL Server 2000 (en supposant id est votre ordre de tri et unique):

SELECT CASE WHEN rownumbers.rownumber < 4 
      THEN CHAR(65 + rownumbers.rownumber - 1) 
      ELSE '' 
     AS <WHATEVER> 
     ,mytable.id 
     ,mytable.descr 
FROM (
    SELECT l.id, COUNT(*) AS rownumber 
    FROM mytable AS l 
    LEFT JOIN mytable AS r 
     ON l.id >= r.id 
    GROUP BY l.id 
) AS rownumbers 
INNER JOIN mytable 
    ON mytable.id = rownumbers.id 
+0

ne nécessite pas une clause "OVER ...."? –

+0

Que diriez-vous de SQL Server 2000? –

+0

@Joel, oui - doigts plus vite que le cerveau. –

0

Vous ne pouvez pas le faire dans une instruction select unique dans SQL Server 2000. SQL Server 2000 n'a pas d'instruction ROWNUM.

Si vous souhaitez utiliser une table temporaire, vous pouvez le faire avec la fonction IDENTITY.

SELECT IDENTITY(int,1,1) rownum, 
     id, 
     descr 
INTO #mytable 
from mytable 

SELECT CASE WHEN ROWNUMBER < 4 
     THEN CHAR(65 + ROWNUMBER - 1) 
     ELSE '' 
    AS <WHATEVER> 
    ,X.id 
    ,X.descr 
FROM #mytable X 
ORDER BY rownum 

REMARQUE: La fonction IDENTITY peut uniquement être utilisée dans une instruction SELECT INTO.

+0

Je suppose que vous pouvez le faire dans une déclaration, ressemble à la solution SQL de Cade peut fonctionner. –

+0

Merci pour la réponse. J'ai fini par utiliser une solution qui était 75% de Cade et 25% à vous. –

Questions connexes