>Ciao, ho un problemino: c'è un modo per moltiplicare i record
>di una query?
>Cerco di chiarire con un esempio
>il risultato della mia query è questo
>qta CodArt prezzo
>3 cod1 10
>2 cod2 5
>
>ma io vorrei questo
>qta CodArt prezzo
>3 cod1 10
>3 cod1 10
>3 cod1 10
>2 cod2 5
>2 cod2 5
>
>moltiplicare il record n volte, dove n è il campo qta.
>Si può fare in qualche modo?
Ciao Stefano,
Potresti definire una UDF che tramite una CTE ricorsiva generi una sequenza numerica che provvederai a "mettere in JOIN" con il tuo result set mediante l'operatore CROSS APPLY:
USE tempdb;
CREATE TABLE dbo.foo(
qta int NOT NULL,
CodArt char(4) NOT NULL,
prezzo int NOT NULL
);
INSERT dbo.foo VALUES
(3, 'cod1', 10)
, (2, 'cod2', 5);
GO
CREATE FUNCTION dbo.ufn_Numbers(
@Seed int = 1,
@Increment int = 1,
@MaxValue int
)
RETURNS TABLE
RETURN(
WITH CTE_Numbers AS
(
SELECT @Seed AS Number
UNION ALL
SELECT Number + @Increment
FROM CTE_Numbers
WHERE Number < @MaxValue
)
SELECT *
FROM CTE_Numbers
);
GO
SELECT F.*
FROM dbo.foo AS F
CROSS APPLY dbo.ufn_Numbers(DEFAULT, DEFAULT, F.qta);
/* Output:
qta CodArt prezzo
----------- ------ -----------
3 cod1 10
3 cod1 10
3 cod1 10
2 cod2 5
2 cod2 5
(5 row(s) affected)
*/
DROP FUNCTION dbo.ufn_Numbers;
DROP TABLE dbo.foo;
>Grazie
Prego.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org