aiuto query associazione parametro
Daniela83 non è online. Ultima attività: 07/07/2008 12.02.24Daniela83
Inserito il: 30 giugno 2008 13.05
3 messaggi dal 30 giu 2008 Istalla Microsoft Silverlight!
Ciao,

sto sviluppando un'applicazione che interroga un DB MS SQL server. In base al valore di un parametro (qui lo chiamo X) di una tabella C dove ci sono delle risposte devo associare solo alcune voci della tabella D. come farlo in SQL?

la tabella D è formata da id_voce, voce
La tabella C è formata da id_risp, risposta

io devo fare una tabella E che contenta risposta, voce.
in base alla risposta che ho dato (padre o madre), devo visualizzare solo le voci (molto, abbastanza, poco, niente)

Ho provato così:

Select * from
If Q1.p_index='1' and Q1.p_index='2'
then Scelta.voce='Ottimo'
else (qui non so cosa mettere perchè vorrei che visualizzasse tutte le altre voci)
End if
Microsoft Most Valuable Professional
Re: aiuto query associazione parametro
Andrea Montanari non è online. Ultima attività: 04/09/2008 0.56.06Andrea Montanari
Inserito il: 30 giugno 2008 17.19
contributi / Top Poster / Community manager / www.asql.biz / 925 messaggi dal 27 lug 2005 Istalla Microsoft Silverlight!
salve,
Daniela83 wrote:
Ciao,

sto sviluppando un'applicazione che interroga un DB MS SQL server. In base al valore di un parametro (qui lo chiamo X) di una tabella C dove ci sono delle risposte devo associare solo alcune voci della tabella D. come farlo in SQL?

la tabella D è formata da id_voce, voce
La tabella C è formata da id_risp, risposta

io devo fare una tabella E che contenta risposta, voce.
in base alla risposta che ho dato (padre o madre), devo visualizzare solo le voci (molto, abbastanza, poco, niente)

Ho provato così:

Select * from
If Q1.p_index='1' and Q1.p_index='2'
then Scelta.voce='Ottimo'
else (qui non so cosa mettere perchè vorrei che visualizzasse tutte le altre voci)
End if

potresti per favore postare la stuttura delle tabelle coinvolte e chiarire un attimino come e cosa desideri ottenere?
saluti

Andrea Montanari (Microsoft MVP - SQL Server)
http://www.asql.biz - http://italy.mvps.org
Re: aiuto query associazione parametro
Daniela83 non è online. Ultima attività: 07/07/2008 12.02.24Daniela83
Inserito il: 01 luglio 2008 09.03
3 messaggi dal 30 giu 2008 Istalla Microsoft Silverlight!
tabella risposte

CREATE TABLE `Questionari`.`Q2` (
`id q2` int(10) unsigned NOT NULL auto_increment,
`voci` varchar(500) NOT NULL,
PRIMARY KEY (`id q2`)
) ENGINE=MyISAM AUTO_INCREMENT=23 DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC;

tabella riepilogativa

CREATE TABLE `Questionari`.`Q1` (
`id q1` int(11) NOT NULL auto_increment,
`voci` varchar(300) NOT NULL,
`padre` varchar(45) NOT NULL,
`voci_bis` varchar(45) NOT NULL,
PRIMARY KEY (`id q1`)
) ENGINE=MyISAM AUTO_INCREMENT=45 DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC;

tabella scelte

CREATE TABLE `Questionari`.`Scelte` (
`id scelta` int(11) NOT NULL auto_increment,
`voce` varchar(45) NOT NULL,
PRIMARY KEY (`id scelta`)
) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC;


tabella che contiene le tre cose

select `id q1`, d.voci as padre, a.voci, padre as p_index, b.voce as voci_bis, b.`id scelta`
from Q1 a
join Q2 d
on a.padre=d.`id q2`
left join Scelte b
on a.voci_bis=b.`id scelta`


esempio:

tabella risposte

in famiglia,coi genitori
in famiglia, con i fratelli
padre
madre

tabella scelte
ottimo
buono
molto
abbastanza

tabella riepilogativa
in famiglia, coi genitori (vuoto)
in famiglia, coi fratelli (ottimo)

per padre e madre devo associare solo molto e abbastanza

praticamente ho fatto un questionario e le risposte devono essere registrate nel database... cosi ho fatto la tabella risposte dove sono indicate tutte le risposte del questionario, la tabella scelte dove sono registrate tutte le diverse scelte, quindi una tabella riepilogativa che contiene tutti le risposte con le scelte.
nella tabella riepilogativa ho fatto un campo con le risposte ("PADRE"), uno dove sono registrate tutte le risposte possibili ("VOCI") e uno dove sono registrate le scelte (VOCI_BIS)

praticamente ho
q1 I tuoi genitori sono
- sposati
-divorziati

q2 com'è il rapporto
ottimo buono pessimo
-padre
-madre

q3 quanto parli con
poco abbast molto

-famiglia
-amici
-prof

etc.

ho registrato tutte le domande, tutte le risposte, tutte le scelte
nella tabella riepilogativa ho fatto un select che selezionasse le domande (padre), tutte le possibili risposte di ogni domanda (voci), e poi ho fatto un campo voci_bis per inserire le scelte.

solo per le risposte alla domanda q2 devo solo poter scegliere le scelte indicate e quindi devo solo visualizzare quello nelle opzioni.
Microsoft Most Valuable Professional
Re: aiuto query associazione parametro
Andrea Montanari non è online. Ultima attività: 04/09/2008 0.56.06Andrea Montanari
Inserito il: 01 luglio 2008 17.30
contributi / Top Poster / Community manager / www.asql.biz / 925 messaggi dal 27 lug 2005 Istalla Microsoft Silverlight!
salve,
Daniela83 wrote:
tabella risposte

CREATE TABLE `Questionari`.`Q2` (
`id q2` int(10) unsigned NOT NULL auto_increment,
`voci` varchar(500) NOT NULL,
PRIMARY KEY (`id q2`)
) ENGINE=MyISAM AUTO_INCREMENT=23 DEFAULT CHARSET=latin1
ROW_FORMAT=DYNAMIC;

tabella riepilogativa

CREATE TABLE `Questionari`.`Q1` (
`id q1` int(11) NOT NULL auto_increment,
`voci` varchar(300) NOT NULL,
`padre` varchar(45) NOT NULL,
`voci_bis` varchar(45) NOT NULL,
PRIMARY KEY (`id q1`)
) ENGINE=MyISAM AUTO_INCREMENT=45 DEFAULT CHARSET=latin1
ROW_FORMAT=DYNAMIC;

tabella scelte

CREATE TABLE `Questionari`.`Scelte` (
`id scelta` int(11) NOT NULL auto_increment,
`voce` varchar(45) NOT NULL,
PRIMARY KEY (`id scelta`)
) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=latin1
ROW_FORMAT=DYNAMIC;

tabella che contiene le tre cose

select `id q1`, d.voci as padre, a.voci, padre as p_index, b.voce as voci_bis, b.`id scelta`
from Q1 a
join Q2 d
on a.padre=d.`id q2`
left join Scelte b
on a.voci_bis=b.`id scelta`

la modellazione, per quel che ho capito, mi pare pessima [a dir poco ]..
from Q1 a
join Q2 d
on a.padre=d.`id q2`
dove `padre` varchar(45) = `id q2` int(10)
e lo stesso per
on a.voci_bis=b.`id scelta`
che relazione puo' esserci nei 2 domini, se non derivante da un cast piu' o meno implicito? formalmente e' molto sbagliato...

esempio:
tabella risposte
in famiglia,coi genitori
in famiglia, con i fratelli
padre
madre
cio' sta a significare che, in una colonna, possono essere presenti piu' di una risposta? (> in famiglia,coi genitori) ... se cosi' e', altro errore formale che difficilmente riesci a correggere nell'esplosione di proiezione..
preferirei un'altra relazione molti a molti
#Domande { IdDomanda, TestoDomanda}
#Risposte { IdDomanda, Valore}
una per ogni risposta possibile
tabella scelte
ottimo
buono
molto
abbastanza
direi altra relazione, simile a
#Scelte { IdScelta, Valore}
#RisposteScelte { IdDomanda, IdScelta}
una per ogni scelta possibile
praticamente ho fatto un questionario e le risposte devono essere registrate nel database... cosi ho fatto la tabella risposte dove sono indicate tutte le risposte del questionario, la tabella scelte dove sono registrate tutte le diverse scelte, quindi una tabella riepilogativa che contiene tutti le risposte con le scelte. nella tabella riepilogativa ho fatto un campo con le risposte ("PADRE"), uno dove sono registrate tutte le risposte possibili ("VOCI") e uno dove sono registrate le scelte (VOCI_BIS)

praticamente ho
q1 I tuoi genitori sono
- sposati
-divorziati

q2 com'è il rapporto
ottimo buono pessimo
-padre
-madre

q3 quanto parli con
poco abbast molto

-famiglia
-amici
-prof

etc.

ho registrato tutte le domande, tutte le risposte, tutte le scelte nella tabella riepilogativa ho fatto un select che selezionasse le domande (padre), tutte le possibili risposte di ogni domanda (voci), e poi ho fatto un campo voci_bis per inserire le scelte.

solo per le risposte alla domanda q2 devo solo poter scegliere le scelte indicate e quindi devo solo visualizzare quello nelle opzioni.

ripeto, a mio parere pare tutto molto sbagliato.. non conosco le finalita' di analisi ed a cosa vuoi in effetti addivenire, ma personalmente imbastirei un modello molto simile a (codice per SQL Server):
SET NOCOUNT ON;
USE tempdb;
GO
CREATE TABLE dbo.Domande (
[IdDomanda] int NOT NULL /IDENTITY/ PRIMARY KEY,
[testo] varchar(500) NOT NULL,
);

CREATE TABLE dbo.Risposte (
[IdRisposta] int NOT NULL /IDENTITY/ PRIMARY KEY,
[testo] varchar(500) NOT NULL,
);

CREATE TABLE dbo.RisposteDomande (
[IdDomanda] int NOT NULL
CONSTRAINT fk_RisposteDomande$has$Domanda
FOREIGN KEY REFERENCES dbo.Domande (IdDomanda),
[IdRisposta] int NOT NULL
CONSTRAINT fk_RisposteDomande$has$Risposta
FOREIGN KEY REFERENCES dbo.Risposte (IdRisposta),
CONSTRAINT pk_RisposteDomande
PRIMARY KEY ([IdDomanda] ,[IdRisposta] )
);

GO
INSERT INTO dbo.Risposte VALUES ( 1, 'Sposati' );
INSERT INTO dbo.Risposte VALUES ( 2, 'Divorziati' );
INSERT INTO dbo.Risposte VALUES ( 3, 'Vedovi' );
INSERT INTO dbo.Risposte VALUES ( 4, 'Ottimo' );
INSERT INTO dbo.Risposte VALUES ( 5, 'Buono' );
INSERT INTO dbo.Risposte VALUES ( 6, 'Pessimo' );
INSERT INTO dbo.Risposte VALUES ( 7, 'Molto' );
INSERT INTO dbo.Risposte VALUES ( 8, 'Abbastanza' );
INSERT INTO dbo.Risposte VALUES ( 9, 'Poco' );

INSERT INTO dbo.Domande VALUES ( 1, 'I tuoi genitori sono' ); INSERT INTO dbo.RisposteDomande VALUES ( 1, 1 );
INSERT INTO dbo.RisposteDomande VALUES ( 1, 2 );
INSERT INTO dbo.RisposteDomande VALUES ( 1, 3 );

INSERT INTO dbo.Domande VALUES ( 2, 'Com''e'' il tuo rapporto con tuo padre' );
INSERT INTO dbo.RisposteDomande VALUES ( 2, 4 );
INSERT INTO dbo.RisposteDomande VALUES ( 2, 5 );
INSERT INTO dbo.RisposteDomande VALUES ( 2, 6 );

INSERT INTO dbo.Domande VALUES ( 3, 'Com''e'' il tuo rapporto con tua madre' );
INSERT INTO dbo.RisposteDomande VALUES ( 3, 4 );
INSERT INTO dbo.RisposteDomande VALUES ( 3, 5 );
INSERT INTO dbo.RisposteDomande VALUES ( 3, 6 );

INSERT INTO dbo.Domande VALUES ( 4, 'Quanto parli con i tuoi professori' ); INSERT INTO dbo.RisposteDomande VALUES ( 4, 7 );
INSERT INTO dbo.RisposteDomande VALUES ( 4, 8 );
INSERT INTO dbo.RisposteDomande VALUES ( 4, 9 );
GO
SELECT *
FROM dbo.Domande d
JOIN dbo.RisposteDomande rd
ON rd.IdDomanda = d.IdDomanda
JOIN dbo.Risposte r
ON rd.IdRisposta= r.IdRisposta
--WHERE d.IdDomanda = @Param
GO
DROP TABLE dbo.RisposteDomande, dbo.Risposte, dbo.Domande;
--<------
IdDomanda testo IdDomanda IdRisposta IdRisposta testo
---------
-------------------------------------
---------
---------
---------
------------
1 I tuoi genitori sono 1 1 1 Sposati
1 I tuoi genitori sono 1 2 2 Divorziati
1 I tuoi genitori sono 1 3 3 Vedovi
2 Com'e' il tuo rapporto con tuo padre 2 4 4 Ottimo
2 Com'e' il tuo rapporto con tuo padre 2 5 5 Buono
2 Com'e' il tuo rapporto con tuo padre 2 6 6 Pessimo
3 Com'e' il tuo rapporto con tua madre 3 4 4 Ottimo
3 Com'e' il tuo rapporto con tua madre 3 5 5 Buono
3 Com'e' il tuo rapporto con tua madre 3 6 6 Pessimo
4 Quanto parli con i tuoi professori 4 7 7 Molto
4 Quanto parli con i tuoi professori 4 8 8 Abbastanza
4 Quanto parli con i tuoi professori 4 9 9 Poco

saluti

Andrea Montanari (Microsoft MVP - SQL Server)
http://www.asql.biz - http://italy.mvps.org

Vai a:
Torna al forum |   Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.


maltra - 641 pt
vladimiro - 461 pt
fabrica - 180 pt

Ultimi vincitori: fabrica, vladimiro, PeppeDotNet

Iscriviti anche tu e raccogli punti. Questo mese in palio VS 2008 + Windows Server 2008, ReShaper e 1 ebook!



COMMUNITY
ULTIMI MESSAGGI


IN EVIDENZA
MISC
Powered by .db Forums