[SQL SERVER 2008] Divisione di una righa in più righe

mercoledì 03 luglio 2013 - 19.58
Tag Elenco Tags  VB.NET  |  .NET 2.0  |  .NET 3.0  |  .NET 3.5  |  Windows 7  |  Visual Studio 2008  |  SQL Server 2008  |  Office 2010  |  Internet explorer 8.0  |  Firefox

raamino Profilo | Newbie

Salve,
volevo porvi un quesito sulla creazione di una vista da una tabella, esempio:
da questa tabella con un record:
ID | Comparto | Unita edilizia | Volumi elementari |
-----------------------------------------------------------------------------
1 | 1 | 2 | 4 |

Vorrei creare una vista che mi permette di creare 4 record
da quella tabella tramite il numero di volumi elementari
e cioè

ID | Comparto | Unita edilizia | Volume elementare |
-----------------------------------------------------------------------------
1 | 1 | 2 | 1 |
-----------------------------------------------------------------------------
2 | 1 | 2 | 2 |
-----------------------------------------------------------------------------
3 | 1 | 2 | 3 |
-----------------------------------------------------------------------------
4 | 1 | 2 | 4 |

e cosi via per ogni record della tabella.
Spero di esermi spiegato
Grazie

renarig Profilo | Expert

Questo mi sembra difficile ( quindi piu bello )


quindi se tu avessi questi 2 record
-- IDo -------Com -------- UEd -------- VEl --
--- 1 -------- 1 ----------- 2 ---------- 4 ---
--- 2 -------- 7 ----------- 9 ---------- 3 ---

vorresti questo risultato:
-- IDr ----- IDo -------Com -------- UEd -------- VEl --
-- 1 -------- 1 -------- 1 ----------- 2 ---------- 1 ---
-- 2 -------- 1 -------- 1 ----------- 2 ---------- 2 ---
-- 3 -------- 1 -------- 1 ----------- 2 ---------- 3 ---
-- 4 -------- 1 -------- 1 ----------- 2 ---------- 4 ---
-- 5 -------- 2 -------- 7 ----------- 9 ---------- 1 ---
-- 6 -------- 2 -------- 7 ----------- 9 ---------- 2 ---
-- 7 -------- 2 -------- 7 ----------- 9 ---------- 3 ---


Il conteggio dei record del risultato corrisponde alla somma
dei valori al campo "VEl" della origine
Giusto ?

Tu hai parlato di una vista,
Quindi hai escluso un ciclo con tabella temporanea ???


Ragionevolmente quanto potra essere un valore limite per "VEl" ???



.


raamino Profilo | Newbie

Si esatto!!!!
Il problema che non ho una esperienza tale da
risolvere questo problemino.
Il valore massimo di "VEI" è 18/20.
ciao e grazie per l'interessamento.

alx_81 Profilo | Guru

>ciao e grazie per l'interessamento.
ciao,

osserva il seguente esempio:

USE tempdb; GO CREATE TABLE #VolumiElementariHeader ( ID int NOT NULL PRIMARY KEY CLUSTERED , Comparto int NOT NULL , UnitaEdilizia int NOT NULL , VolumiElementari int NOT NULL ); GO INSERT INTO #VolumiElementariHeader (ID, Comparto, UnitaEdilizia, VolumiElementari) VALUES (1, 1, 2, 4) , (2, 7, 9, 3) , (3, 5, 7, 20); GO WITH ReplicateTable(ID, Comparto, UnitaEdilizia, VolumiElementari, i) as ( SELECT ID , Comparto , UnitaEdilizia , VolumiElementari , 1 FROM #VolumiElementariHeader UNION ALL SELECT ID , Comparto , UnitaEdilizia , VolumiElementari , i + 1 FROM ReplicateTable R WHERE R.i < R.VolumiElementari ) select ID , Comparto , UnitaEdilizia , VolumiElementari , i from ReplicateTable order by ID , i; DROP TABLE #VolumiElementariHeader; GO

spero sia quello che ti serve.
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

raamino Profilo | Newbie

Salve, grazie per la risposta,
questo script da un errore:
WITH VolEle(ID, Comparto, UnitaEdilizia, VolumiElementari, i) as ( SELECT ID , Comparto , UnitaEdilizia , VolumiElementari , 1 FROM dbo.datigen UNION ALL SELECT ID , Comparto , UnitaEdilizia , VolumiElementari , i + 1 FROM VolEle R WHERE R.i < R.VolumiElementari )

Messaggio 156, livello 15, stato 1, riga 1
Sintassi non corretta in prossimità della parola chiave 'WITH'.

alx_81 Profilo | Guru

>Salve, grazie per la risposta,
>questo script da un errore:
se hai usato solo la with non andrà mai, la with prepara un subset che poi va consumato in una istruzione successiva.
Siccome poi la with si aspetta di essere il primo statement chiamato (o successivo a un ;) deve essere la prima istruzione oppure devi mettere ; dopo l'istruzione precedente.
ciao
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

raamino Profilo | Newbie

Ciao,
grazie, ma anche con il tuo esempio (eseguito interamente) mi da lo stesso errore,
volevo chiederti ma la tabella "ReplicateTable" deve esistere
in qualche DB?
ciao

alx_81 Profilo | Guru

>grazie, ma anche con il tuo esempio (eseguito interamente) mi da lo stesso errore,
>volevo chiederti ma la tabella "ReplicateTable" deve esistere in qualche DB?
è la CTE.. prendendo il mio script, copia incolla e mi funge..
mi sembra molto strano.. sei su SQL 2008? Che Compatibility level hai su quel db (lo vedi dalle opzioni nelle proprietà del db).
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

raamino Profilo | Newbie

ti invio 2 print screen

1098x822 546Kb


1097x807 514Kb

alx_81 Profilo | Guru

è SQL Server 2000.
Su quello in alto non andrà mai.
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

raamino Profilo | Newbie

ok risolto devo convertire il db da 2000 a 2008.
Grazie
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5