SQL-Abfrageproblem (SQL Server + ASP)

dbgta

Grünschnabel
hi!

ich habe ein problem mit einer sql-abfrage (ms sql server, asp), wäre toll wenn mir jemand dabei helfen könnte ;-)

tabelle:
*****
kats

cols:
***
id (primary key)
id_firma
name
rang
rang_sub
unter

beispiel: (hoffe die formattierung hält)
******

id id_firma name rang rang_sub unter
1 4 Kontakt 1 0 0
2 4 Support 2 0 3
3 4 Domain 2 1 0
4 4 Grafik 2 2 0
5 4 Webpages 2 3 0
6 4 Hotlines 2 4 0
7 4 Links 3 0 0

beschreibung:
**********

rang symbolisiert eine kategorie;
rang_sub eine subkategorie;

die abfrage soll den inhalt für ein menü darstellen, das dann auf der asp-seite aufgelöst wird, in diesem fall:

Kontakt
Support : Domain : Grafik : Webpages : Hotlines
Links


problem:
******

mein problem ist, dass ich die column "unter" aus der tabelle entfernen muss und ich die werte dieser column automatisch errechnet brauche, ganz einfach aus diesem grund dass dadurch das gesamte konstrukt des menüs (und in späterer folge auch die administration) des menüs wesentlich erleichert wird. jetzt hab ich es schon mit normalen abfragen, verknüpften abfragen und sichten pobiert, krieg es aber nicht hin ;-)

ich bräuchte eine abfrage oder sicht, die ich dann auf der asp-seite aufrufen kann und mir exakt die gleiche tabelle wiedergibt, nur dass eben die dann "virtuelle" column "unter" automatisch errechnet wird anstatt das sie direkt in der tabelle steht.

id id_firma name rang rang_sub unter (<< in der sicht automatisch errechnet)
id id_firma name rang rang_sub unter
1 4 Kontakt 1 0 0
2 4 Support 2 0 3
3 4 Domain 2 1 0
4 4 Grafik 2 2 0
5 4 Webpages 2 3 0
6 4 Hotlines 2 4 0
7 4 Links 3 0 0


danke für die hilfe,

christian
 
Ich hatte nur ein Beispiel in Access konstruiert für Dich. Aber die IIf() Abfragen kann man ja in SQL-Server auch mit case when realisieren.

Du baust Dir eine view oder Abfrage aus Deiner Tabelle und liest den Count von rang aus. Von dem ziehst Du 1 ab.

z.B.

SELECT [rang], count(rang)-1 as unter
FROM menu
GROUP BY [rang];

Um das Feld unter bei der Verbindung der Tabelle und der View nur für den Datensatz darzustellen, wo sub_rang 0 und unter >0 ist, könnte hier die iif() Abfrage oder case when eingebaut werden.

SELECT menu.id, menu.id_firma, menu.link, menu.rang, menu.rang_sub, iif(menu.rang_sub=0 and unter>0,unter,0) AS anzahl
FROM menu INNER JOIN a_rang ON menu.rang = a_rang.rang;

Es gibt bestimmt noch mehrere Lösungen, aber so automatisiert sich das ganze.
 
Zurück