2012-10-03 2 views
0

J'ai une table avec 2 colonnes:Comment obtenir quelque chose comme Ltrim (objet, nombre) sur sql?

select product, quantity from datainformation 

ce rendement de table:

product quantity 
1  10 
2  30 
4  23 
191  10 
900  1 
1234  5 
12345  2 
  1. deux colonnes sont int.
  2. tableau pourrait avoir N enregistrements

Je dois obtenir 2 cordes pour 50 dossiers. Ma question est de savoir comment obtenir ces chaînes:

stringproducts='1 2 4 191 900 1234 12345' 
stringquantity='10 30 23 10 1 5 2 ' 

Maintenant, je besoin de ces chaînes pour tous les 50 dossiers de sorte que, par exemple, si j'ai 51 disques que je besoin mon second « bloc » d'avoir le dernier produit et la dernière quantité

Dans une autre langue, je pourrais utiliser ltrim(cad,5). Comment ferais-je cela en SQL?

Puis-je utiliser des trucs pour cela? Ou ai-je besoin d'une boucle et les concaténer 1 pour 1? Je crois qu'avec un truc ça pourrait être plus facile (peut-être un truc dans une boucle mais ça serait plus facile une boucle pour chaque enregistrement)

+0

Est-ce que vous cherchez? http://msdn.microsoft.com/es-es/library/ms177827.aspx – redej

Répondre

1

Vous pouvez utiliser FOR XML PATH et STUFF():

select 
    stuff((
     select ' ' + cast(product as char(10)) 
     from datainformation 
     for XML path('')),1,1,'') as products, 
stuff((
     select ' ' + cast(quantity as char(10)) 
     from datainformation 
     for XML path('')),1,1,'') as quantity 

Voir SQL Fiddle with Demo

0

Si vous le lancez comme CHAR (5), il aura les espaces de fin pour faire un bloc de 5 caractères pour votre chaîne plutôt formatée et concaténée.

declare @t table (product int, quantity int); 
insert @t select 
1  ,10 union all select 
2  ,30 union all select 
4  ,23 union all select 
191  ,10 union all select 
900  , 1 union all select 
1234  , 5 union all select 
12345 , 2; 

declare @products varchar(max); 
declare @quantity varchar(max); 

select @products = coalesce(@products,'') 
       + cast(product as char(5)), 
     @quantity = coalesce(@quantity,'') 
       + cast(quantity as char(5)) 
from @t 
order by product 

select @products, @quantity 
Questions connexes