Concatenação de uma única linha com origem de várias linhas retornadas em T-SQL

É possível utilizar o recurso em T-SQL para que várias linhas retornadas em uma select sejam concatenadas em uma única.

O cenário utilizado foi por exemplo, em impressão de etiquetas, que um produto produzido foi consumido x produtos com y quantidades.

Utilizamos no exemplo o Banco de Dados AdventureWorks2008 do SQL Server, a qual pode ser adaptado facilmente para qualquer versão que voce esteja utilizando.

Select P.Name
       +' - Tkg '+ SOD.CarrierTrackingNumber
       +' - Qty '+ CONVERT(VARCHAR, SOD.OrderQty)
       +' - Prc '+ CONVERT(VARCHAR, SOD.UnitPrice)
From   Sales.SalesOrderDetail SOD
         inner join Production.Product P
           on P.ProductID = SOD.ProductID
Where SalesOrderID = 43664

O seguinte resultado irá aparecer, sendo um resiltado simples que já estamos acostumados.

ScreenHunter_334 Jul. 25 10.43

O problema é que o gerador de relatório estava interpretando que cada linha do SQL estava sendo colocado um uma folha. Para isso, precisávamos colocar todas as linhas retornadas em uma única (como se fosse uma única string). Para isso, executamos o seguinte comando:

Select STUFF((SELECT DISTINCT ' ' +
		P.Name  
		+' - Tkg '+ SOD.CarrierTrackingNumber 
	  	+' - Qty '+  CONVERT(VARCHAR, SOD.OrderQty) 
		+' - Prc '+  CONVERT(VARCHAR, SOD.UnitPrice) + CHAR(10)
From Sales.SalesOrderDetail SOD
	inner join Production.Product P
		on P.ProductID = SOD.ProductID
Where SalesOrderID = 43664
FOR XML PATH('')),1,1,'')

O seguinte resultado foi apresentado:

ScreenHunter_335 Jul. 25 10.44

Precisamos colocar o CHAR(10) para que o gerador de relatório interpresse esse código como <Enter>, colocando assim cada uma das linhas em uma linha separada no relatório (diferente do retorno de várias linhas do SQL).

Dessa forma, fizemos que esse campo retornasse um MEMO para o gerador de relatório.

 

 

 

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s