Hallo, ich habe eine Tabelle mit Variablenwerten.
Wie kann ich die beiden Abfragen verbinden, dass ich von allen Dokumenten mit ‚Verschleissteil‘ = ‚1‘ die ‚Artikelnummer‘ angezeigt bekomme?
Abfrage 1
Select distinct Vv.ValueCache, vv.DocumentID
From VariableValue Vv
Where Vv.VariableID = ( select variableid
from variable
where Variablename like 'Artikelnummer')
order by vv.ValueCache ASC
Abfrage 2
Select distinct Vv.DocumentID
From VariableValue Vv
Where Vv.VariableID = ( select variableid
from variable
where Variablename like 'Verschleissteil')
And Vv.ValueCache = '1'
order by Vv.DocumentID ASC
Ergebnisspalten sollten ‚Artikelnummer‘, ‚DocumentID‘, ‚Verschleissteil‘ sein
Hallo,
würdet ihr das so machen, oder gibt’s eine bessere Lösung?
> select
> *
> from
> (
> Select distinct Vv.ValueCache Artikelnummer, vv.DocumentID
> From VariableValue Vv
> Where Vv.VariableID = ( select variableid
> from variable
> where Variablename like 'Artikelnummer')
> ) as a
> inner join
> (
> Select distinct v2.ValueCache Verschleissteil, V2.DocumentID
> From VariableValue V2
> Where V2.VariableID = ( select variableid
> from variable
> where Variablename like 'Verschleissteil')
> And V2.ValueCache = '1'
> ) as b
> on a.DocumentID = b.DocumentID
> order by a.Artikelnummer
Das sieht mir viel zu kompliziert aus, kann dir aber ohne Nachfrage keine Alternative anbieten, weil mir der Tabellenaufbau und die Inhalte nicht ganz klar sind.
Was ist das überhaupt für ein Datenbanksystem?
Woher kommt dieses „ValueCache“?
In welcher Tabelle und welcher Spalte stehen „Verschleissteil“ und der Wert „1“?
das war nur die halbe Antwort.
Tabellen- und Spaltennamen sehe ich nun, auch wenn mir nicht die komplette Syntax bekannt ist (was ist das denn für eine Datenbank??) Ich habe nach fillfactor und nvarchar gegoogelt, weil die mir gänzlich unbekannt waren, vermutlich ist es ein Microsoft SQL-Server?
Unklar ist mir immer noch:
Ist das richtig, dass in der Spalte Variablenname sowohl „Artikelnummer“ als auch „Verschleissteil“ stehen kann?
Denn du hast geschrieben
aber Artikelnummer und Verschleissteil sind gar keine Spalten.
Grundsätzlich sollte man so wenige Abfragen wie möglich machen, da das die Datenbank belastet. Und das LIKE nutzt man, wenn man nicht den vollen Feldinhalt kennt, sondern nur einen Teil. Da du aber keine Platzhalter nutzt, also Gleichheit verlangst, ist das = dann auch schneller.
Ohne völlig verstanden zu haben, was du da machst:
SELECT DISTINCT
A.[ValueText] AS 'Artikelnummer',
A.[DocumentID] AS 'DokumentId aus A',
V.[DocumentID] AS 'DokumentId aus V',
1 as 'Verschleissteil'
FROM [dbo].[Variable]
INNER JOIN [dbo].[VariableValue] as A
ON ([dbo].[Variable].[VariableID] = A.[VariableID]
AND A.[VariableName] = 'Artikelnummer')
INNER JOIN [dbo].[VariableValue] as V
ON ([dbo].[Variable].[VariableID] = V.[VariableID]
AND V.[VariableName] = 'Verschleissteil'
AND V.[ValueCache] = 1)
Anmerkungen:
Du willst eh nur Artikel, die Verschleißteile sind. Was soll das dann mit der Spalte ‚Verschleissteil‘? Ich hab einfach mal 1 rein gesetzt.
Die DocumentId… Ist die für Zeilen mit gleicher VariableId auch immer gleich? Ich hab mal zwei Spalten gemacht…
Das mit dem ValueCache mußt du wissen, was das ist…
Ich hab das jetzt aus dem Kopf geschrieben, Bugs sind daher möglich.
In der Tabelle ‚VariableValue‘ sind alle Variablen aus einem PDM gespeichert.
Diese sind je ‚DocumentID‘, ‚ConfigurationsID‘, ‚RevisionsNo‘ unterschiedlich.
Ich möchte den Variablenwert (ValueCache = Variablenwert, egal welcher Typ ) für eine bestimmte Artikelnummer einer Variablen der letzten Revision auslesen.
So geht es…
Hier habe ich einzelne SELECT in variablen gespeichert und verwende diese weiter.
Sollte man das optimieren oder ist es egal ob ich mehrere SELECT habe?
declare @artNr varchar(30);
declare @varName varchar(30);
declare @varID_ArtNr int;
declare @varID_Var int;
declare @docID int;
declare @confID int;
declare @RevID int;
select @artNr = 'B200200'; /* Artikelnummer, die gesucht wird */
select @varName = 'Bezeichnung1'; /* Rückgabevariablenname */
/* Variablen ID für Artikelnummer suchen */
select @varID_ArtNr = (select
VariableID
from
Variable
where
Variablename like 'Artikelnummer')
/* Variablen ID für Rückgabevariablename suchen */
select @varID_Var = (select
VariableID
from
Variable
where
Variablename like @VarName)
/* Document ID für Artikelnummer suchen */
select @docID = (select
DocumentID
from
VariableValue
where
VariableID = @varID_ArtNr
and
ValueCache = @artNr
group by DocumentID
)
/* Configuration ID für Artikelnummer suchen */
select @confID = (select
ConfigurationID
from
VariableValue
where
VariableID = @varID_ArtNr
and
ValueCache = @artNr
and
ConfigurationID >=3
)
/* grösste Revision ID für Rückgabevariable suchen */
select @RevID = (select
MAX(RevisionNo)
from
VariableValue
where
DocumentID = @docID
and
ConfigurationID = @confID
and
VariableID = @varID_Var
)
/* Variablenwert suchen und zurückgeben*/
select
ValueCache
from
VariableValue
where
DocumentID = @docID
and
ConfigurationID = @confID
and
VariableID = @varID_Var
and
RevisionNo = @RevID