Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Raggruppamento e creazione campo di testo

4 views
Skip to first unread message

Nick

unread,
Nov 6, 2009, 8:56:54 AM11/6/09
to
Buongiorno a tutti ho questa struttura:
Nome | Tipo1 | Tipo2 | Ore
pippo | uno | a | 1
pippo | uno | b | 2
pippo | due | a |3
.
.
.
.
e vorrei raggruppare i valori per ottenere:
Nome | Tipo1 | OreT
pippo | uno | 1a + 2b
pippo | due | 3a
.
.
.
da notare che il campo OreT è un campo testo e non una semplice somma
del campo ore (purtroppo)

è possibile senza ricorrere ad una store procedure??

grazie
ciao
Nick

Lorenzo Benaglia

unread,
Nov 6, 2009, 5:13:48 PM11/6/09
to
"Nick" <n.s...@gmail.com> wrote:
> � possibile senza ricorrere ad una store procedure??

Ciao Nick,

Se utilizzi SQL Server 2005+ puoi utilizzare la clausola FOR XML PATH come
nel seguente esempio:

USE tempdb;

CREATE TABLE dbo.foo(
Nome varchar(10) NOT NULL,
Tipo1 char(3) NOT NULL,
Tipo2 char(1) NOT NULL,
Ore int NOT NULL
);

INSERT dbo.foo VALUES
('pippo', 'uno', 'a', 1)
, ('pippo', 'uno', 'b', 2)
, ('pippo', 'due', 'a', 3);

SELECT
Nome
, Tipo1
, STUFF(
(
SELECT ' + ' + CAST(Ore AS varchar(2)) + Tipo2 AS [text()]
FROM dbo.foo
WHERE Nome = Q.Nome
AND Tipo1 = Q.Tipo1
FOR XML PATH('')
), 1, 3, '') AS OreT
FROM dbo.foo AS Q
GROUP BY Nome, Tipo1;

/* Output:

Nome Tipo1 OreT
---------- ----- --------
pippo due 3a


pippo uno 1a + 2b

(2 row(s) affected)

*/

DROP TABLE dbo.foo;

> grazie
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo
http://social.microsoft.com/Forums/it-IT/sqlserverit

0 new messages