Jump to content

SQL mit Access bzw.SQL Datenbank


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo und Guten Tag.
Bin nach längerer Zeit mal wieder in diesem Forum.
Eine Sicht mit den Spalten: Startnummer1-Gegner1-Ergebnis1-Stechen1- Startnummer2-Gegner2-Ergebnis2-Stechen2-Sum1-Sum2-Sieger.
Der SQL-Code soll jetzt Ergebnis1 und Stechen1 in Sum1 zusammenrechnen, sowie Ergebnis2 und Stechen2 in
Sum2. Wenn das Ergebnis in Sum1 höher ist als in Sum2 soll der Name in Gegner1 in Ergebnis stehen, oder umgekehrt, wenn Sum2 höher ist als Sum1 soll der Name von Gegner2 in Ergebnis stehen.
Beim speichern wird folgender Fehler angezeigt: Falsche Syntax bei '>'

Fehler wird sein, IIF, das ist eine Funktion in Access, aber nicht in einer SQL Datenbank, richtig??

Wie muss der Code denn dann für eine SQL Datenbank aussehen? Meine Kenntnisse in SQL

sind nicht besonders gut.
Kann mir jemand weiterhelfen? Wenn ja, mein Dank im Voraus.
Mit freundlichen Grüßen
Skaletti
Hier der Code:

SELECT   Durchgang_1_VP.Startnummer1, Durchgang_1_VP.Gegner1, Durchgang_1_VP.Ergebnis1, Durchgang_1_VP.Stechen1, Durchgang_1_VP.Startnummer2,Durchgang_1_VP.Gegner2, Durchgang_1_VP.Ergebnis2, Durchgang_1_VP.Stechen2,
[Ergebnis1]+[Stechen1] AS Sum1, [Ergebnis2]+[Stechen2] AS Sum2, (IIf([sum1]>[sum2],[Gegner1],[Gegner2])) AS Sieger
FROM     Durchgang_1_VP;

Link zu diesem Kommentar

Hi,

es wird jetzt eine neue Spalte erzeugt, aber leider steht dort der Sieger nicht drin. Ich bekomme keine Fehlermeldung.

SELECT     Startnummer1, Gegner1, Ergebnis1, Stechen1, Startnummer2, Gegner2, Ergebnis2, Stechen2, Sieger, Ergebnis1 + Stechen1 AS Sum1, Ergebnis2 + Stechen2 AS Sum2, 
                      CASE WHEN Sum1 > Sum2 THEN Gegner1 WHEN Sum2 > Sum1 THEN Gegner2 END AS Expr1
FROM         dbo.Durchgang_1_VP
Link zu diesem Kommentar

es wird jetzt eine neue Spalte erzeugt, aber leider steht dort der Sieger nicht drin. Ich bekomme keine Fehlermeldung.

 

Und was steht dort drin? Hast Du mit einem kleinen Beispiel angefangen? Vermutlich nicht, Du hast es einfach eingebaut, richtig? :)

Kannst Du ein Tabellenerstellungsscript und ein paar Beispieldaten bereitstellen?

 

BTW: Bitte poste das zukünftig doch etwas besser formatiert, Danke.

Link zu diesem Kommentar

Hallo Sunny61,

in der Spalte Sieger steht leider nichts drin. Ich Versuche mal den Tabellenaufbau und die Sicht darzustellen.

Tabelle                        Sicht

Startnummer1             Startnummer1

Gegner1                      Gegner1

Ergebnis1                    Ergebnis1

Stechen1                     Stechen1

Startnummer2             Startnummer2

Gegner2                      Gegner2

Ergebnis2                    Ergebnis2

Stechen2                     Stechen2

Sum1                           SQL-Code   ASSum1

Sum2                           SQL-Code   ASSum2

Sieger                          SQL-Code   ASSieger

 

Werte die in der Tabelle stehen werden:

Startnummer1  Gegner1      Ergebnis1  Stechen1  Startnummer2  Gegner2    Ergebnis2  Stechen2  Sum1  Sum2  Sieger

1                                  Mustermann, Klaus       98                        9                               2                    Test, Willi                  98                     10                  

3                                  Probe, Hugo                  96                        0                               4                    Versuch, Dieter         95                     0 

 

 

Werte die jetzt so in der Sicht stehen:

Startnummer1  Gegner1      Ergebnis1  Stechen1  Startnummer2  Gegner2    Ergebnis2  Stechen2  Sum1  Sum2  Sieger

1                                  Mustermann, Klaus       98                        9                               2                    Test, Willi                  98                     10             107           108           null           

3                                   Probe, Hugo                  96                        0                               4                    Versuch, Dieter         95                     0               96              95           null 

 

Ich hoffe das die Darstellung so verständlich ist.

Nochmals Danke für Deine Unterstützung

Gruß Skaletti.

 

 

 

Link zu diesem Kommentar

Poste doch mal wenigstens ein Tabellenerstellungsscript, das hilft beim nachvollziehen ungemein, Danke.

Wird denn die Spalte Expr1 nicht dargestellt?

 

Rechtsklick auf die Tabelle im SQL Server Manager > Script für Tabelle als > CREATE. Den Inhalt hier posten.

 

BTW: Summenfelder bzw. berechnete Felder solltest Du in Tabellen vermeiden, die Berechnungszeit ist zu vernachlässigen. Also besser die Summe nur on-the-fly berechnen lassen.

 

Hier ein Beispiel für formatierten SQL-Code:

 

SELECT     
	Startnummer1, 
	Gegner1, 
	Ergebnis1, 
	Stechen1, 
	Startnummer2, 
	Gegner2, 
	Ergebnis2, 
	Stechen2, 
	Sieger, 
	Ergebnis1 + Stechen1 AS Sum1, 
	Ergebnis2 + Stechen2 AS Sum2, 

CASE 
	WHEN Sum1 > Sum2 
	THEN Gegner1 
	WHEN Sum2 > Sum1 
	THEN Gegner2 
END AS Expr1
FROM         
	dbo.Durchgang_1_VP
Link zu diesem Kommentar

Hallo Sunny61,

Ich hoffe das ist richtig so.

Die Spalte Expr1 ist dargestellt.

 

 

USE [DataBaseVereinspokal]
GO

/****** Object:  Table [dbo].[Durchgang_1_VP]    Script Date: 11/14/2014 11:20:46 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[Durchgang_1_VP](
 [startnummer1] [numeric](18, 0) NOT NULL,
 [Gegner1] [nvarchar](50) NULL,
 [Ergebnis1] [numeric](18, 0) NULL,
 [stechen1] [numeric](18, 0) NULL,
 [startnummer2] [numeric](18, 0) NULL,
 [Gegner2] [nvarchar](50) NULL,
 [Ergebnis2] [numeric](18, 0) NULL,
 [stechen2] [numeric](18, 0) NULL,
 [sum1] [numeric](18, 0) NULL,
 [sum2] [numeric](18, 0) NULL,
 [sieger] [nvarchar](50) NULL,
 CONSTRAINT [PK_1. Durchgang VP] PRIMARY KEY CLUSTERED
(
 [startnummer1] 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

Link zu diesem Kommentar

So funktioniert es wie gewünscht:

 

SELECT     
	Startnummer1, 
	Gegner1, 
	Ergebnis1, 
	Stechen1, 
	Startnummer2, 
	Gegner2, 
	Ergebnis2, 
	Stechen2, 
	Ergebnis1 + Stechen1 AS SummeGegner1,
	Ergebnis2 + Stechen2 AS SummeGegner2,

CASE 
	WHEN Ergebnis1 + Stechen1 > Ergebnis2 + Stechen2 
	THEN Gegner1 
	WHEN Ergebnis2 + Stechen2 > Ergebnis1 + Stechen1 
	THEN Gegner2 
END AS Sieger
FROM         
	dbo.Durchgang_1_VP
Die Spalten SummeGegner1, SummeGegner2 und Sieger brauchst Du in der Tabelle nicht, denn es wird beim Aufruf der View immer neu berechnet. So hast Du in der Ansicht immer aktuelle Endergebnisse.

 

EDIT: Ergebnis:

 

Startnummer1	Gegner1			Ergebnis1	Stechen1	Startnummer2	Gegner2			Ergebnis2	Stechen2	SummeGegner1	SummeGegner2	Sieger
1		Mustermann, Klaus	98		9		2		Test, Willi		98		10		107		108		Test, Willi
2		Probe, Hugo		96		0		4		Versuch, Dieter		95		0		96		95		Probe, Hugo
bearbeitet von Sunny61
Link zu diesem Kommentar

vielen Dank für Deine Mühe und Hilfe.

Bitte, gern geschehen. ;)

 

Habe dadurch wieder sehr viel gelernt. Werde mir das mit dem Formatieren merken.

Ist dann viel übersichtlicher.

Es funzt prima so.

 

Die Formatierung ist in den Abfragen vom SQL Server wichtig, innerhalb der VIEWS nutzt das leider wenig. Aber du solltest eh auf Stored Procedures umstellen. ;)

Und nimm die Summenfelder aus der Tabelle, sind flüssiger als Wasser!

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...