Query sql con declare e join

martedì 26 maggio 2015 - 11.37
Tag Elenco Tags  VB.NET  |  .NET 4.0  |  SQL Server 2008 R2

trinity Profilo | Guru

buongiorno

ho questa query:

DECLARE @imposta_ita as decimal(18,2) DECLARE @imposta_str as decimal(18,2) Select @imposta_ita = imposta_ita, @imposta_str = imposta_str from tab_imposta_soggiorno join tab_alloggiati as tab_allog on tab_imposta_soggiorno.idkey = tab_allog.esente_imposta where idkey= tab_allog.esente_imposta and tab_allog.codice_albergo=3156 select @imposta_ita,@imposta_str

ecco le tabelle del db con dei dati prova:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

dalla query che ho scritto sopra stando a quello che mi serve dovrebbe tornare come risultato due righe con valore :
0.50 - 0.50
1.00 - 1.00

invece mi ritorna solo una riga con valore
1.00 - 1.00

dove ho sbagliato?Mi potete dare una mano?

grazie e ciao
Cirillo Fabio
www.trycontact.com
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

renarig Profilo | Expert

Mahhh!!!
Sono decontestualizzato e non entro nel significato della query

Tuttavia osservo che

Nella tabella Tab_Alloggiati hai definito il campo Cod_Albergo come Key primaria,
poi nella insert ci metti 2 record entrambi con il valore di 3156 al Cod_Albergo

chiaramente uno dei 2 non può entrarci

e il risultato che ottieni ( 1 record ) è relativo solamente al unico record immesso

Ma se il campo Cod_Albergo non fosse Key e tu avessi 2 record 3156
allora avresti 2 record come risultato






trinity Profilo | Guru

Ciao mi sn sbagliato in quella tabella c'è un campo chiave identity e non mi sn accorto di averlo scritto nel post quindi normale che ci siano 2 record cod_albergo con 3156
Cirillo Fabio
www.trycontact.com
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

renarig Profilo | Expert

Si, è vero ... quel tipo di estrazione con utilizzo di variabili
che fai ti restituisce solamente l'ultimo record
indipendentemente dai JOIN o altro

Ma a rifletterci un po mi sembra giusto.

la tua variabile è una sola
Come potrebbe contenere tutti i record filtrati della tabella ???

Poi io sono ancora molto acerbo con TSQL
Purtroppo sono più maturo come età

USE tempdb; GO -- xxx Creo la tabella xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx CREATE TABLE #T1( Id int NOT NULL, Ca1 varchar(50) NULL, Ca2 varchar(50) NULL, ) GO -- xxx Inserisco un po di dati xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx INSERT #T1 (Id, Ca1, Ca2) VALUES (20, N'ergrt', N'jbt'), (14, N'zzz Ultimo Nell Ordinamento', N'rttye'), (17, N'aaa Primo Nell Ordinamento', NULL), (6, N'yerhy', N'derk'), (10, N'tyty', NULL) GO -- xxx Estraggo SOLO l'ultimo record xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx DECLARE @C1 as Varchar(50) Select @C1 = Ca1 FROM #T1 ORDER BY Ca1 /* A questo punto la variabile @C1 è solamente una di numero ...... come potrebbe contenere un valore per ogni record ????? */ SELECT @C1 -- xxx Estraggo tutti i record xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx SELECT Id, Ca1, Ca2 FROM #T1 ORDER BY Ca1 -- xxx Ripulisco tempdb xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx DROP TABLE #T1; GO -- Finito xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Facci sapere

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