2010-06-21 17 views
0

Je souhaite utiliser une liste de nombres arbitraires comme une sorte d'entrée pour un select. L'option A, bien sûr, consiste à créer une table temporaire qui contient uniquement les valeurs (par exemple 1,2,3). J'espère que vous savez ce que l'option> A est.Teradata SQL: sélectionnez un littéral

Supposons que la déclaration est comme:

select Fx, 
XXXXXX as Foo 
from MyTable 
where MyTest depends on each XXXXXX 

Donc, si je pouvais faire comme par magie XXXXX une liste de valeurs (1,2,3), j'aurais un ResultSet comme:

My val | Foo 
    -------+--- 
     cat | 1 
    mouse | 2 
cheesecake | 3 

Encore une fois, je pourrais me procurer les entrées d'une table, mais je préfère ne pas le faire si ce n'est pas nécessaire. Gurus, veuillez vous inscrire.

TIA.

+0

Je ne suis pas sûr de ce qui est vraiment demandé. Pouvez-vous clarifier un peu? Vous n'êtes pas intéressé à joindre à une table de nombres, correct? Cherchez-vous à sélectionner des valeurs entre x et y? Ou cherchez-vous à créer une liste et seulement récupérer les valeurs qui correspondent (IN)? S'excuse d'être dense. –

Répondre

1

Vous obtiendrez probablement du succès en utilisant la fonction ROW_NUMBER() Window Aggregate.

un ordre aléatoire

SELECT CALENDAR_DATE 
    , ROW_NUMBER() 
     OVER (ORDER BY 1) 
FROM SYS_CALENDAR.CALENDAR 
WHERE CALENDAR_DATE BETWEEN DATE '2010-06-01' AND DATE 
; 

OU ordre par la colonne

SELECT CALENDAR_DATE 
    , ROW_NUMBER() 
     OVER (ORDER BY CALENDAR_DATE) 
FROM SYS_CALENDAR.CALENDAR 
WHERE CALENDAR_DATE BETWEEN DATE '2010-06-01' AND DATE 
; 

ou une partition par une autre colonne pour redémarrer la séquence

SELECT CALENDAR_DATE 
    , YEAR_OF_CALENDAR 
    , ROW_NUMBER() 
     OVER (PARTITION BY YEAR_OF_CALENDAR 
      ORDER BY CALENDAR_DATE) 
FROM SYS_CALENDAR.CALENDAR 
WHERE CALENDAR_DATE BETWEEN DATE '2009-11-01' AND DATE 
; 

;