Select Distinct * da una vista (SQL Server 2008)

lunedì 31 maggio 2010 - 11.10

ridaria Profilo | Expert

Ciao amici.
Database SQL Server 2008

Ho la necessità di eseguire una lettura su una Vista tralasciando i duplicati (Select Distinct), e ottenere comunque tutti i campi della Vista:

Un esempio:

nella vista Articoli ho i seguenti campi:

codice
codiceFornitore
nome
descrizione
prezzo
quantità
giacenza

I duplicati li individuo grazie al campo codice, pertanto eseguo la seguente query:


Select Distinct (codice), codiceFornitore,nome,descrizione,prezzo, quantità, giacenza from View_Articoli where codice like '90002%' or codiceFornitore like '90002%'

Il risultato che ottengo è con i duplicati!!!!:-(

D'altro canto non posso fare:
Select Distinct (codice) from View_Articoli where codice like '90002%' or codiceFornitore like '90002%' perchè a me in lettura sevono tutti i dati del record: nome descrizione etc.....


Si può risolvere questo problema?????


Grazie.






Riccardo D'Aria

GruppoETD Profilo | Newbie

Ciao, cosa succede se non metti le parentesi tonde dopo distinct nella prima query?

lbenaglia Profilo | Guru

>Si può risolvere questo problema?????
Nel caso di codice duplicato, quali valori vuoi recuperare per le altre colonne? I massimi, i minimi, la somma, quali?

>Grazie.
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

ridaria Profilo | Expert


>Nel caso di codice duplicato, quali valori vuoi recuperare per
>le altre colonne? I massimi, i minimi, la somma, quali?

nel caso di codice duplicato non voglio visualizzare l'intero record. Il mio obbiettivo è non leggere a video dueo o più volte lo stesso articolo.


Grazie

>--
>Lorenzo Benaglia
>Microsoft MVP - SQL Server
>http://blogs.dotnethell.it/lorenzo/
>http://italy.mvps.org

Riccardo D'Aria

lbenaglia Profilo | Guru

>
>>Nel caso di codice duplicato, quali valori vuoi recuperare per
>>le altre colonne? I massimi, i minimi, la somma, quali?
>
>nel caso di codice duplicato non voglio visualizzare l'intero
>record. Il mio obbiettivo è non leggere a video dueo o più volte
>lo stesso articolo.
E cosa vorresti vedere?
Puoi preparare un esempio completo con la struttura della tabella (CREATE TABLE), della vista (CREATE VIEW), alcune righe di prova (INSERT INTO) ed il result set che vorresti ottenere con quei dati?

>Grazie
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

ridaria Profilo | Expert

non mi sono spiegato bene: ci riprovo:


Ho una vista che contiene una serie di record alcuni di questi sono dei duplicati, (alcuni record sono uguali tra di loro).

Devo fare una select su questa vista e prelevare una serie di record ad eccezione dei duplicati, normalmente uso la clausola DISTINCT.

Ci sto provando così:

Select Distinct codice, codiceFornitore, campo 2,campo3, campo4 where codice like '8022%' or codiceFornitore like '8022%'

Questa select mi restituisce anche i duplicati!!!!!!!
Io i duplicati non li voglio vedere, mi sai dire come si imposta la select?

Grazie


Riccardo D'Aria

lbenaglia Profilo | Guru

>Questa select mi restituisce anche i duplicati!!!!!!!
>Io i duplicati non li voglio vedere, mi sai dire come si imposta
>la select?

Stai ragionando in modo errato.
Quella query esegue un raggruppamento su tutte le colonne della SELECT list pertanto è equivalente a:

SELECT codice, codiceFornitore, campo 2,campo3, campo4 WHERE codice LIKE '8022%' OR codiceFornitore LIKE '8022%' GROUP BY codice, codiceFornitore, campo 2,campo3, campo4;

Ora, se non posti l'esempio che ti ho chiesto non ne verrai fuori.

>Grazie
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

ridaria Profilo | Expert

OK

USE [DB_DATI_UBIK_STORE_PRO]
GO

/****** Object: Table [dbo].[Articoli] Script Date: 05/31/2010 15:24:45 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[Articoli](
[ID] [int] IDENTITY(1,1) NOT NULL,
[CodiceArticolo] [nvarchar](15) NULL,
[nome] [nvarchar](100) NULL,
[RicercaAlternativa] [nvarchar](30) NULL,
[Collocazione] [nvarchar](15) NULL,
[Descrizione] [nvarchar](250) NULL,
[pathImmagine] [nvarchar](100) NULL,
[UnitaMisura] [nvarchar](50) NULL,
[tipoImballo] [nvarchar](50) NULL,
[QtaPerConf] [decimal](18, 2) NULL,
[IDCategoria] [int] NULL,
[idSubCategoria] [int] NULL,
[ScortaMinima] [decimal](18, 2) NULL,
[ScortaMax] [decimal](18, 2) NULL,
[IVA] [nvarchar](20) NULL,
[Ricarico] [float] NULL,
[PrezzoAcquisto] [decimal](18, 6) NULL,
[PrezzoVendita] [decimal](18, 6) NULL,
[IVAacquisto] [nvarchar](20) NULL,
[UltimaDataAgg] [date] NULL,
[Peso] [decimal](18, 2) NULL,
[idClassTecnica] [int] NULL,
[idMarca] [int] NULL,
[attr1] [nvarchar](40) NULL,
[attr2] [nvarchar](40) NULL,
[attr3] [nvarchar](40) NULL,
[val1] [nvarchar](30) NULL,
[val2] [nvarchar](30) NULL,
[val3] [nvarchar](30) NULL,
[qtaEsistente] [decimal](18, 6) NULL,
[Alternativi] [bit] NULL,
[Listino_1_perc] [decimal](18, 6) NULL,
[Listino_1_prezzo] [decimal](18, 6) NULL,
[Listino_2_perc] [decimal](18, 6) NULL,
[Listino_2_prezzo] [decimal](18, 6) NULL,
[Listino_3_perc] [decimal](18, 6) NULL,
[Listino_3_prezzo] [decimal](18, 6) NULL,
[Listino_4_perc] [decimal](18, 6) NULL,
[Listino_4_prezzo] [decimal](18, 6) NULL,
[Listino_6_perc] [decimal](18, 6) NULL,
[Listino_6_prezzo] [decimal](18, 6) NULL,
[Listino_5_perc] [decimal](18, 6) NULL,
[Listino_5_prezzo] [decimal](18, 6) NULL,
[PathAllegato] [nvarchar](100) NULL,
CONSTRAINT [PK_Articoli] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

ALTER TABLE [dbo].[Articoli] ADD CONSTRAINT [DF_Articoli_IDCategoria_1] DEFAULT ((0)) FOR [IDCategoria]
GO

ALTER TABLE [dbo].[Articoli] ADD CONSTRAINT [DF_Articoli_idSubCategoria_1] DEFAULT ((0)) FOR [idSubCategoria]
GO

ALTER TABLE [dbo].[Articoli] ADD CONSTRAINT [DF_Articoli_ScortaMinima_1] DEFAULT ((0)) FOR [ScortaMinima]
GO

ALTER TABLE [dbo].[Articoli] ADD CONSTRAINT [DF_Articoli_ScortaMax] DEFAULT ((0)) FOR [ScortaMax]
GO

ALTER TABLE [dbo].[Articoli] ADD CONSTRAINT [DF_Articoli_PrezzoVendita] DEFAULT ((0)) FOR [PrezzoVendita]
GO

ALTER TABLE [dbo].[Articoli] ADD CONSTRAINT [DF_Articoli_Altenativi] DEFAULT ((0)) FOR [Alternativi]
GO

ALTER TABLE [dbo].[Articoli] ADD CONSTRAINT [DF_Articoli_PathAllegato] DEFAULT ('') FOR [PathAllegato]
GO

Tabella che contiene il CodiceFornitore
USE [DB_DATI_UBIK_STORE_PRO]
GO

/****** Object: Table [dbo].[ArticoliCodiciFornitori] Script Date: 05/31/2010 15:25:58 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[ArticoliCodiciFornitori](
[id] [int] IDENTITY(1,1) NOT NULL,
[codiceArticolo] [nvarchar](30) NOT NULL,
[idArticolo] [int] NOT NULL
) ON [PRIMARY]

GO

ALTER TABLE [dbo].[ArticoliCodiciFornitori] WITH CHECK ADD CONSTRAINT [FK_ArticoliCodiciFornitori_Articoli] FOREIGN KEY([idArticolo])
REFERENCES [dbo].[Articoli] ([ID])
ON DELETE CASCADE
GO

ALTER TABLE [dbo].[ArticoliCodiciFornitori] CHECK CONSTRAINT [FK_ArticoliCodiciFornitori_Articoli]
GO

La VISTA:
USE [DB_DATI_UBIK_STORE_PRO]
GO

/****** Object: View [dbo].[View_Articoli_CodiciFornitori] Script Date: 05/31/2010 15:28:14 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE VIEW [dbo].[View_Articoli_CodiciFornitori]
AS
SELECT dbo.Articoli.ID, dbo.Articoli.CodiceArticolo, dbo.ArticoliCodiciFornitori.codiceArticolo AS CodiceArticoloFornitore, dbo.Articoli.nome,
dbo.Articoli.RicercaAlternativa, dbo.Articoli.Collocazione, dbo.Articoli.Descrizione, dbo.Articoli.pathImmagine, dbo.Articoli.UnitaMisura,
dbo.Articoli.tipoImballo, dbo.Articoli.QtaPerConf, dbo.Articoli.IDCategoria, dbo.Articoli.idSubCategoria, dbo.Articoli.ScortaMinima, dbo.Articoli.ScortaMax,
dbo.Articoli.IVA, dbo.Articoli.Ricarico, dbo.Articoli.PrezzoAcquisto, dbo.Articoli.PrezzoVendita, dbo.Articoli.IVAacquisto, dbo.Articoli.UltimaDataAgg,
dbo.Articoli.Peso, dbo.Articoli.idClassTecnica, dbo.Articoli.idMarca, dbo.Articoli.attr1, dbo.Articoli.attr2, dbo.Articoli.attr3, dbo.Articoli.val1,
dbo.Articoli.val2, dbo.Articoli.val3, dbo.Articoli.qtaEsistente, dbo.Articoli.Alternativi, dbo.Articoli.Listino_1_perc, dbo.Articoli.Listino_1_prezzo,
dbo.Articoli.Listino_2_perc, dbo.Articoli.Listino_2_prezzo, dbo.Articoli.Listino_3_perc, dbo.Articoli.Listino_3_prezzo, dbo.Articoli.Listino_4_perc,
dbo.Articoli.Listino_4_prezzo, dbo.Articoli.Listino_6_perc, dbo.Articoli.Listino_6_prezzo, dbo.Articoli.Listino_5_perc, dbo.Articoli.Listino_5_prezzo,
dbo.Articoli.PathAllegato
FROM dbo.Articoli LEFT OUTER JOIN
dbo.ArticoliCodiciFornitori ON dbo.Articoli.ID = dbo.ArticoliCodiciFornitori.idArticolo

GO

EXEC sys.sp_addextendedproperty @name=N'MS_DiagramPane1', @value=N'[0E232FF0-B466-11cf-A24F-00AA00A3EFFF, 1.00]
Begin DesignProperties =
Begin PaneConfigurations =
Begin PaneConfiguration = 0
NumPanes = 4
Configuration = "(H (1[29] 4[32] 2[31] 3) )"
End
Begin PaneConfiguration = 1
NumPanes = 3
Configuration = "(H (1 [50] 4 [25] 3))"
End
Begin PaneConfiguration = 2
NumPanes = 3
Configuration = "(H (1 [50] 2 [25] 3))"
End
Begin PaneConfiguration = 3
NumPanes = 3
Configuration = "(H (4 [30] 2 [40] 3))"
End
Begin PaneConfiguration = 4
NumPanes = 2
Configuration = "(H (1 [56] 3))"
End
Begin PaneConfiguration = 5
NumPanes = 2
Configuration = "(H (2 [66] 3))"
End
Begin PaneConfiguration = 6
NumPanes = 2
Configuration = "(H (4 [50] 3))"
End
Begin PaneConfiguration = 7
NumPanes = 1
Configuration = "(V (3))"
End
Begin PaneConfiguration = 8
NumPanes = 3
Configuration = "(H (1[56] 4[18] 2) )"
End
Begin PaneConfiguration = 9
NumPanes = 2
Configuration = "(H (1 [75] 4))"
End
Begin PaneConfiguration = 10
NumPanes = 2
Configuration = "(H (1[66] 2) )"
End
Begin PaneConfiguration = 11
NumPanes = 2
Configuration = "(H (4 [60] 2))"
End
Begin PaneConfiguration = 12
NumPanes = 1
Configuration = "(H (1) )"
End
Begin PaneConfiguration = 13
NumPanes = 1
Configuration = "(V (4))"
End
Begin PaneConfiguration = 14
NumPanes = 1
Configuration = "(V (2))"
End
ActivePaneConfig = 0
End
Begin DiagramPane =
Begin Origin =
Top = 0
Left = 0
End
Begin Tables =
Begin Table = "Articoli"
Begin Extent =
Top = 6
Left = 38
Bottom = 121
Right = 213
End
DisplayFlags = 280
TopColumn = 0
End
Begin Table = "ArticoliCodiciFornitori"
Begin Extent =
Top = 6
Left = 251
Bottom = 106
Right = 426
End
DisplayFlags = 280
TopColumn = 0
End
End
End
Begin SQLPane =
End
Begin DataPane =
Begin ParameterDefaults = ""
End
Begin ColumnWidths = 9
Width = 284
Width = 1500
Width = 1500
Width = 1500
Width = 1500
Width = 1500
Width = 1500
Width = 1500
Width = 1500
End
End
Begin CriteriaPane =
Begin ColumnWidths = 11
Column = 1440
Alias = 1905
Table = 1170
Output = 720
Append = 1400
NewValue = 1170
SortType = 1350
SortOrder = 1410
GroupBy = 1350
Filter = 1350
Or = 1350
Or = 1350
Or = 1350
End
End
End
' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'VIEW',@level1name=N'View_Articoli_CodiciFornitori'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_DiagramPaneCount', @value=1 , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'VIEW',@level1name=N'View_Articoli_CodiciFornitori'
GO

L'esempio di quello che vorrei ottenere è quello che ti ho detto:

I recordset senza i duplicati.

Grazie

Riccardo D'Aria

lbenaglia Profilo | Guru

>L'esempio di quello che vorrei ottenere è quello che ti ho detto:
>
>I recordset senza i duplicati.
Mancano i comandi di INSERT di tutte le tabelle ed il result set finale che vorresti ottenere con quei dati.

>Grazie
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

ridaria Profilo | Expert

INSERT INTO [DB_DATI_UBIK_STORE_PRO].[dbo].[Articoli]
([CodiceArticolo]
,[nome]
,[RicercaAlternativa]
,[Collocazione]
,[Descrizione]
,[pathImmagine]
,[UnitaMisura]
,[tipoImballo]
,[QtaPerConf]
,[IDCategoria]
,[idSubCategoria]
,[ScortaMinima]
,[ScortaMax]
,[IVA]
,[Ricarico]
,[PrezzoAcquisto]
,[PrezzoVendita]
,[IVAacquisto]
,[UltimaDataAgg]
,[Peso]
,[idClassTecnica]
,[idMarca]
,[attr1]
,[attr2]
,[attr3]
,[val1]
,[val2]
,[val3]
,[qtaEsistente]
,[Alternativi]
,[Listino_1_perc]
,[Listino_1_prezzo]
,[Listino_2_perc]
,[Listino_2_prezzo]
,[Listino_3_perc]
,[Listino_3_prezzo]
,[Listino_4_perc]
,[Listino_4_prezzo]
,[Listino_6_perc]
,[Listino_6_prezzo]
,[Listino_5_perc]
,[Listino_5_prezzo]
,[PathAllegato])
VALUES
(<CodiceArticolo, nvarchar(15),>
,<nome, nvarchar(100),>
,<RicercaAlternativa, nvarchar(30),>
,<Collocazione, nvarchar(15),>
,<Descrizione, nvarchar(250),>
,<pathImmagine, nvarchar(100),>
,<UnitaMisura, nvarchar(50),>
,<tipoImballo, nvarchar(50),>
,<QtaPerConf, decimal(18,2),>
,<IDCategoria, int,>
,<idSubCategoria, int,>
,<ScortaMinima, decimal(18,2),>
,<ScortaMax, decimal(18,2),>
,<IVA, nvarchar(20),>
,<Ricarico, float,>
,<PrezzoAcquisto, decimal(18,6),>
,<PrezzoVendita, decimal(18,6),>
,<IVAacquisto, nvarchar(20),>
,<UltimaDataAgg, date,>
,<Peso, decimal(18,2),>
,<idClassTecnica, int,>
,<idMarca, int,>
,<attr1, nvarchar(40),>
,<attr2, nvarchar(40),>
,<attr3, nvarchar(40),>
,<val1, nvarchar(30),>
,<val2, nvarchar(30),>
,<val3, nvarchar(30),>
,<qtaEsistente, decimal(18,6),>
,<Alternativi, bit,>
,<Listino_1_perc, decimal(18,6),>
,<Listino_1_prezzo, decimal(18,6),>
,<Listino_2_perc, decimal(18,6),>
,<Listino_2_prezzo, decimal(18,6),>
,<Listino_3_perc, decimal(18,6),>
,<Listino_3_prezzo, decimal(18,6),>
,<Listino_4_perc, decimal(18,6),>
,<Listino_4_prezzo, decimal(18,6),>
,<Listino_6_perc, decimal(18,6),>
,<Listino_6_prezzo, decimal(18,6),>
,<Listino_5_perc, decimal(18,6),>
,<Listino_5_prezzo, decimal(18,6),>
,<PathAllegato, nvarchar(100),>)
GO


INSERT INTO [DB_DATI_UBIK_STORE_PRO].[dbo].[ArticoliCodiciFornitori]
([codiceArticolo]
,[idArticolo])
VALUES
(<codiceArticolo, nvarchar(30),>
,<idArticolo, int,>)
GO


Riccardo D'Aria

lbenaglia Profilo | Guru

Scusa, ma credo che non ci siamo capiti.
Ho bisogno che tu posti un esempio COMPLETO con un certo numero di righe per ogni tabella (ovvero di n comandi di INSERT) ed il result set che vorresti ottenere con quei dati.

Quando parlo di esempio completo, puoi prendere spunto dall'ultimo post di questo thread:
http://www.dotnethell.it/forum/messages.aspx?ThreadID=35611

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

ridaria Profilo | Expert

>Scusa, ma credo che non ci siamo capiti.

io non so manco come si fa ad ottenere il report che mostri nel post che mi hai Indicato!

Come al solito, per spiegare perche l'uomo invento la ruota, parti dalla genesi di dio onipotente.

Già ti ho detto una volta che io non sono un amministratore di database, e che uso i database al servizio di altre applicazioni quindi per me i db sono dei servi, e pertanto mi occorre farli funzionare e basta, e non ho bisogno di conoscere fino in fondo come diavolo funziona un db.

Orase mi vuoi dire se ciò che voglio si può fare ti ringrazio, altrimenti grazie lo stesso:



>Ho bisogno che tu posti un esempio COMPLETO con un certo numero
>di righe per ogni tabella (ovvero di n comandi di INSERT) ed
>il result set che vorresti ottenere con quei dati.
>
>Quando parlo di esempio completo, puoi prendere spunto dall'ultimo
>post di questo thread:
>http://www.dotnethell.it/forum/messages.aspx?ThreadID=35611
>
>Ciao!
>--
>Lorenzo Benaglia
>Microsoft MVP - SQL Server
>http://blogs.dotnethell.it/lorenzo/
>http://italy.mvps.org

Riccardo D'Aria

lbenaglia Profilo | Guru

>io non so manco come si fa ad ottenere il report che mostri nel
>post che mi hai Indicato!
Quel "report" l'ho scritto io a manina, non c'è un tool che lo genera.

>Come al solito, per spiegare perche l'uomo invento la ruota,
>parti dalla genesi di dio onipotente.
>
>Già ti ho detto una volta che io non sono un amministratore di
>database, e che uso i database al servizio di altre applicazioni
>quindi per me i db sono dei servi, e pertanto mi occorre farli
>funzionare e basta, e non ho bisogno di conoscere fino in fondo
>come diavolo funziona un db.
>
>Orase mi vuoi dire se ciò che voglio si può fare ti ringrazio,
>altrimenti grazie lo stesso:
Se questo è il modo che hai di porti sui forum forse è meglio che ti affidi ad un buon consulente.
Ti ho semplicemente chiesto un esempio in modo da capire quale risultato vuoi ottenere.
Non vuoi postare i dati? Mi spiace, ma senza un esempio non sono in grado di leggere cosa hai in testa.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

ridaria Profilo | Expert

esempio di record:

id codice codiceFornitore Nome
1 8022 123 Lampadina 2W
2 8022 124 Lampadina 2W
3 8022 125 Lampadina 2W

Come vedi i tre record della vista sono del tutto identici ad eccezione del codice fornitore.

Ora vorrei che facendo una select per codice e codice fornitore con l'operatore like, esso eviti di inserirmeli tutti e tre perche il "codice" dei tre articoli è lo stesso;
esempio:

Select * from VistaArticoli where codice like'12%' or codiceFornitore like'12%'

da questa select vorrei che me ne mostri uno solo dal momento che gli altri due non sono altro che un duplicato.

Ciao e grazie




Riccardo D'Aria

lbenaglia Profilo | Guru

>esempio di record:
>
>id codice codiceFornitore Nome
>1 8022 123 Lampadina 2W
>2 8022 124 Lampadina 2W
>3 8022 125 Lampadina 2W
>
>Come vedi i tre record della vista sono del tutto identici ad
>eccezione del codice fornitore.
>
>Ora vorrei che facendo una select per codice e codice fornitore
>con l'operatore like, esso eviti di inserirmeli tutti e tre perche
>il "codice" dei tre articoli è lo stesso;
> esempio:
>
>Select * from VistaArticoli where codice like'12%' or codiceFornitore
>like'12%'

Scusa, ma questa SELECT non restituisce alcuna riga dato che la condizione "codice like'12%'" non è soddisfatta.
Supponiamo che avresti voluto scrivere "codice like'80%'", quale riga/ghe risultante/i vorresti ottenere?

>da questa select vorrei che me ne mostri uno solo dal momento
>che gli altri due non sono altro che un duplicato.
Non riesco a capre questa frase. Posta il risultato atteso con quei dati.

>Ciao e grazie
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

lbenaglia Profilo | Guru

Nel precedente post ho valutato male l'operatore OR nella tua query, interpretandolo come AND.
Allora, nel seguente esempio vado a restituire la riga riferita all'ID più piccolo raggruppando per codice, ma non ho idea se questo è il risultato atteso:

USE tempdb; CREATE TABLE dbo.foo( id int NOT NULL, codice varchar(4) NOT NULL, codiceFornitore varchar(3) NOT NULL, Nome varchar(20) NOT NULL ); INSERT dbo.foo VALUES (1, '8022', '123', 'Lampadina 2W') , (2, '8022', '124', 'Lampadina 2W') , (3, '8022', '125', 'Lampadina 2W'); WITH CTE_GetKey(id) AS ( SELECT MIN(id) FROM dbo.foo GROUP BY codice ) SELECT F.* FROM dbo.foo AS F JOIN CTE_GetKey AS C ON F.id = C.id WHERE codice LIKE '12%' OR codiceFornitore LIKE '12%'; /* Output: id codice codiceFornitore Nome ----------- ------ --------------- -------------------- 1 8022 123 Lampadina 2W (1 row(s) affected) */ DROP TABLE dbo.foo;

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

ridaria Profilo | Expert

>>esempio di record:
>>
>>id codice codiceFornitore Nome
>>1 8022 123 Lampadina 2W
>>2 8022 124 Lampadina 2W
>>3 8022 125 Lampadina 2W
>>
>>Come vedi i tre record della vista sono del tutto identici ad
>>eccezione del codice fornitore.
>>
>>Ora vorrei che facendo una select per codice e codice fornitore
>>con l'operatore like, esso eviti di inserirmeli tutti e tre perche
>>il "codice" dei tre articoli è lo stesso;
>> esempio:
>>
>>Select * from VistaArticoli where codice like'12%' or codiceFornitore
>>like'12%'
>
>Scusa, ma questa SELECT non restituisce alcuna riga dato che
>la condizione "codice like'12%'" non è soddisfatta.


questa restituisce tutto invece perche codiceFornitore è: 123!!
ed io invece non voglio tutti e tre i record ma uno solo dal momento che tutti e tre sono uguali tra di loro.


Riccardo D'Aria

lbenaglia Profilo | Guru

>questa restituisce tutto invece perche codiceFornitore è: 123!!
Si, leggi sopra.

>ed io invece non voglio tutti e tre i record ma uno solo dal
>momento che tutti e tre sono uguali tra di loro.
No, le righe sono tutte diverse (per id e codiceFornitore).

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

ridaria Profilo | Expert


>No, le righe sono tutte diverse (per id e codiceFornitore).

ecco il punto:

io vorrei che mi si facesse il confronto di uguaglianza tra i record solo in base al campo Codice.
E cioè, per me due record sono uguali quando hanno stesso codice.

Chiaro adesso cosa vorrei ottenere?

Grazie

>
>--
>Lorenzo Benaglia
>Microsoft MVP - SQL Server
>http://blogs.dotnethell.it/lorenzo/
>http://italy.mvps.org

Riccardo D'Aria

ridaria Profilo | Expert

Allora esiste una soluzione a questo specifico caso?



Grazie
Riccardo D'Aria

lbenaglia Profilo | Guru

>Chiaro adesso cosa vorrei ottenere?
No. Quale riga vuoi ottenere coi dati che hai postato?
Basati sull'esempio che trovi sopra.

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

lbenaglia Profilo | Guru

>Allora esiste una soluzione a questo specifico caso?
Allora?!
Guarda che niente ti è dovuto, ricoldalo.
Se avessi fornito tutti i dati che ti ho chiesto avremmo risolto in 2 post invece siamo ancora qua ad aspettare quale riga vuoi ottenere...

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

ridaria Profilo | Expert

il mio allora non era inteso come: Allora mi dai questa risposta.

e se questo è il senso che ci hai letto, tengo a precisare che non era questo.
Sono ben consapevole che nulla mi è dovuto.

Innanzitutto grazie per l'attenzione.

Ho risolto facendo due select con (SP) una sulla colonna codice ed una sulla colonna codiceFornitore, e così ho aggirato il problema dei doppioni.


Grazie ancora
Riccardo D'Aria
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5