2010-08-11 8 views
0

J'ai une table T avec des colonnes A, B, C & D comme ci-dessous:Comment puis-je obtenir une ligne dans le jeu de résultats de 2 lignes dans la table/fichier sans l'aide des curseurs dans Sybase/Perl

A B C D 
=============== 
A1 B1 USD LIBOR 
A1 B2 JPY FIXED 
A2 B3 USD LIBOR 
A2 B4 EUR FIXED 
A3 B5 JPY FIXED 
A3 B6 USD LIBOR 
  1. La table comporte toujours 2 lignes par "A", avec des valeurs différentes de "B".

  2. "B" est unique

  3. "A" - varchar (10), "B" - varchar (8), "C" - varchar (3), "D" - varchar (5)

  4. les règles de validation limitent les colonnes aux formats ci-dessous - "A", « B », "D" - Alphanumeric "C" - Classement alphabétique

Je dois extraire les résultats ci-dessous de la table -

Résultat Set 1:

A1 USD LIBOR JPY FIXED 
A2 USD LIBOR EUR FIXED 
A3 JPY FIXED USD LIBOR 

Résultat Set 2:

USD LIBOR JPY FIXED 
USD IBOR EUR FIXED 

Je souhaite éviter d'utiliser les curseurs, sauf toute autre solution. Puis-je extraire cette table dans un fichier et utiliser Perl pour obtenir le résultat?

S'il vous plaît aider ...

+0

Quelle version de sybase? –

+0

Sybase version 12.5 – Srilesh

+0

Ah, Vous n'avez donc pas la fonction 'LIST'. Ne semble pas prometteur à partir de cette question à moins que vous ne puissiez créer des fonctions ou des agrégats définis par l'utilisateur dans Sybase? http://stackoverflow.com/questions/491566/how-to-get-list-of-values-in-group-by-clause –

Répondre

3

Il peut être fait avec des tables temporaires et plusieurs mises à jour, mais je ne pense pas que ça va être très agréable dans votre table millions de ligne.

Si vos données a toujours 2 lignes par « A », avec des valeurs différentes de « B » et a des dimensions prévisibles (largeurs de colonnes) ou le format (vous pouvez utiliser delimators spéciaux), alors quelque chose comme ça pourrait fonctionner

SELECT A, MIN(B), MAX(B), right(MIN(B + C), 5), right(MIN(B + D), 5), right(MAX(B + C), 5), right(MAX(B + D), 5) FROM my_table GROUP BY A

+0

J'ai essayé la requête ci-dessus, mais cela prend très longtemps et j'ai dû abandonner. J'ai extrait les 4 colonnes dans une table temporaire "my_table", avec l'index sur B pour lancer la requête. – Srilesh

+0

Toutes les suggestions sur l'utilisation des tables temporaires et des mises à jour pour y parvenir. – Srilesh