>Come faccio ad avere negozio, codice, venduto in gennaio, venduto
>in febbraio?
>Mettendo in join le due viste devo fare una full outer in modo
>da non perder gli articoli che sono venduti O a gennaio O a febbraio.
>Devo purtroppo replicare il negozio e il codice onde evitare
>di avere righe con solo un numero.
>EDIT: Forse con una union?
no, una union va in verticale..
invece sarebbe meglio prendere la tua tabella dei "negozi" (di cui non so il nome, sperando che esista ) e metterla in left join prima con una vista e poi con l'altra.
L'importante è avere la "parte di sinistra" con tutti i negozi.
Osserva il seguente esempio:
USE tempdb;
GO
CREATE TABLE dbo.Negozi
(
IDNegozio int NOT NULL
, Nome varchar(50) NOT NULL
, CONSTRAINT PK_dboNegozi PRIMARY KEY CLUSTERED
(
IDNegozio
)
)
GO
INSERT INTO dbo.Negozi (IDNegozio, Nome)
VALUES (1, 'Negozio uno')
INSERT INTO dbo.Negozi (IDNegozio, Nome)
VALUES (2, 'Negozio due')
INSERT INTO dbo.Negozi (IDNegozio, Nome)
VALUES (3, 'Negozio tre')
INSERT INTO dbo.Negozi (IDNegozio, Nome)
VALUES (4, 'Negozio quattro')
GO
-- creo due tabelle facendo finta che siano le tue viste
CREATE TABLE dbo.VistaGennaio
(
IDNegozio int NOT NULL
, Mese tinyint NOT NULL
, Venduto decimal(10,2) NOT NULL
, CONSTRAINT PK_dboVistaGennaio PRIMARY KEY CLUSTERED
(
IDNegozio
)
)
GO
CREATE TABLE dbo.VistaFebbraio
(
IDNegozio int NOT NULL
, Mese tinyint NOT NULL
, Venduto decimal(10,2) NOT NULL
, CONSTRAINT PK_dboVistaFebbraio PRIMARY KEY CLUSTERED
(
IDNegozio
)
)
GO
-- inserisco i valori di prova
INSERT INTO dbo.VistaGennaio (IDNegozio, Mese, Venduto)
VALUES (3, 1, 1005.4)
INSERT INTO dbo.VistaGennaio (IDNegozio, Mese, Venduto)
VALUES (4, 1, 2500.45)
--
INSERT INTO dbo.VistaFebbraio (IDNegozio, Mese, Venduto)
VALUES (1, 2, 3000)
INSERT INTO dbo.VistaFebbraio (IDNegozio, Mese, Venduto)
VALUES (4, 2, 3500.67)
GO
SELECT
Negozio = N.Nome
, [Venduto Gennaio] = ISNULL(G.Venduto, 0)
, [Venduto Febbraio] = ISNULL(F.Venduto, 0)
FROM
dbo.Negozi N
LEFT JOIN dbo.VistaGennaio G ON G.IDNegozio = N.IDNegozio
LEFT JOIN dbo.VistaFebbraio F ON F.IDNegozio = N.IDNegozio
DROP TABLE dbo.VistaFebbraio
DROP TABLE dbo.VistaGennaio
DROP TABLE dbo.Negozi
GO
--
Alessandro Alpi | SQL Server MVP
http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org