PDA

Vollständige Version anzeigen : SQL Abfrage, wie?


seabstian I.
27.11.2002, 13:55
Hi,

ich versuche gerade seit 3 Tagen eine Abfrage mit SQL zu basteln. (hab vorher nichts mit SQL zu tun gehabt)
So langsam bin ich an meine Grenzen gestoßen!
Kennt jemand von euch ein gutes Tutorial?
Bei dem das ganze vernünftig erklärt ist?
Hat jemand ein gutes E-Book für mich?
Noch besser wär natürlich, wenn sich jemand mal den Quelltext anschauen
könnte!

Ich häng ihn einfach mal an:

1 Use VNAggr
2 set dateformat dmy
3 Declare
4 @group VARCHAR (20),
5 @sdate date,
6 @edate date,
7 @type smallint
8 set @group = 'Bintec'
9 set @sdate = '01.11.02'
10 set @edate = '15.11.02'
11 -- set @type = 2
12 SELECT convert(VARCHAR, mib2DailyStats.Dttm,104 ) 'Datum',
ResourceView.displayName 'Device Name' ,
13
(mib2DailyStats.inutil+mib2DailyStats.oututil)/8/1024/1024*mib2DailyStats.de
ltaTime 'Durchsatz in MB'
14 FROM VNAggr.DBA.mib2DailyStats mib2DailyStats,
15 VNAggr.DBA.ResourceView ResourceView,
16 VNAggr.DBA.VNGroupRulesTable VNGroupRulesTable,
17 VNAggr.DBA.VNGroupTable VNGroupTable
18 WHERE VNGroupRulesTable.GroupID = VNGroupTable.GroupID
19 AND mib2DailyStats.resID = ResourceView.resID
20 -- AND ResourceView.devIPstring like
Replace(VNGroupRulesTable.GroupRule,'*','%')
21 AND ResourceView.displayName like
Replace(VNGroupRulesTable.GroupRule,'*','%')
22 AND VNGroupTable.GroupName=@group
23 AND VNGroupRulesTable.RuleType=2
24 -- Or VNGroupRulesTable.RuleType=3
25 AND mib2DailyStats.Dttm between @sdate AND @edate

Das ganze hab ich mit dem QueryAnalyzer von MS erstellt. (Ist beim SQL Server mit dabei)
Abgefragt wird eine MSSQL 2000 Datenbank.
Das Ergebnis soll am Ende in Excel importiert werden.

Mein Problem ist nun, dass ich die Berechnung in Zeile 13 zwar funktioniert,
das Ergebnis aber mit 10 Stellen nach dem Komma ausgegeben wird.
Wie kann ich das auf 2 Stellen runden? Mit Round hab ich das schon
versucht... hat aber irgendwie nicht ganz geklappt. Es wurden nicht alle
Einträge gerundet.

Ab Zeile 18 Brauch ich ne If Abfrage...
if
VNGroupRulesTable.RuleType=3
then
ResourceView.devIPstring like Replace(VNGroupRulesTable.GroupRule,'*','%')
elseif
VNGroupRulesTable.RuleType=2
then
ResourceView.displayName like Replace(VNGroupRulesTable.GroupRule,'*','%')
else
""
end
Das hab ich auch nicht hinbekommen...

Wie kann ich eine Variable mit dem Ergebnis einer Abfrage füllen?
Habs mit Select ausprobiert.. hat aber immer gemeckert, dass man nur eine
Art der Abfrage benutzen kann...

Ich hoffe es kann mir da jemand ein paar Tips geben...
Ich bin echt am Verzweifeln.

Gruß

Sebastian

<Urs Langmeie>
28.11.2002, 14:50
statt if then else... folgendes verwenden:
verschachteltes case:

case when 5 > 4
then 'ja, ist grösser'
else case when 3 = 4
then '3 ist gleich 4 - seit wann?'
else '3 ist ungleich 4'
end
end

seabstian I.
02.12.2002, 11:12
Wie lautet denn der genaue Syntax?
Wie kann ich das in die Select abfrage einbinden?
Hat bei mir nicht hingegauen...
Wollte das bei Zeile 22 einbinden.


Kann mir jemand ein Buch empfehlen, das auf MSSQL ausgerichtet ist?

Gruß

Sebastian

Joachim Hofmann
02.12.2002, 12:33
Eins der besten Bücher für TSQL-Syntax ist die SQL Server Online - Hilfe selbst. Suche einfach nach CASE, Beispiele gibts auch.