SQL mehrere Spalten in der Ansicht aus einer einzigen Tabelle-Spalte

Ich versuche, erstellen Sie eine Ansicht in SQL Server 2008 R2, auf denen die Daten extrahiert aus zwei Tabellen mit dual eins-zu-eins-Beziehungen, und ich möchte zwei Spalten in der Sicht Werte aus einer einzelnen Spalte in einer der Tabellen.

Die Tabellen sind aktuell ähnlich wie in diesen Beispielen:

TableA:

PrimaryKey | Name   | Value_FK | Number_FK
-------------------------------------------
66         | NameA  | 1         | 2
77         | NameB  | 3         | 4

TableB:

PrimaryKey | Value   
-------------------
1          | 238
2          | 456
3          | 100
4          | 200

Sollte die Ansicht so Aussehen:

 Name   | Value | Number
-------------------------
 NameA  | 238   | 456
 NameB  | 100   | 200

('Value' und 'Reihe' sind im wesentlichen die gleiche Art, und beides findet in der 'Wert' - Spalte in TableB eingerichtet. Ich dachte, es wäre mehr leicht zu distingiush zwischen 'Wert' und 'Zahl', als 'Werta" und "Wertb').

Der Faktor, der darüber entscheiden sollte, welche Werte gehen in die Spalte 'Wert' oder in der Spalte 'Nummer' ist der Primärschlüssel in Tabelle B und seine Referenzen in beiden foreignkey in TableA (aber die beiden FKs wird NIE beziehen sich auf den gleichen Schlüssel).

Dies ist wahrscheinlich nicht die brillanteste Datenbank-Modell mit dual-Beziehungen zwischen den Tabellen. Dies ist jedoch aufgrund der Zuordnung einiger C#.NET Klassen zu einer Datenbank mithilfe von ADO.NET Entity Framework, wo der Klasse A hat zwei Objekte der Klasse B (in diesem Fall mit dem Namen 'Wert' und 'Anzahl') und das Datenbank-Modell derzeit Konstrukte zwei Beziehungen, weil dieser. Ändern, ist dies keine option.

Ich habe versucht zu googeln, aber ich finde es schwierig, eine Antwort zu finden, die ich brauche. Vor allem wenn die meisten Ergebnisse sind in etwa das Gegenteil: die Auswahl mehrerer Spalten in eine Spalte.

So, wie soll ich schreiben, die Select-Anweisung?

CREATE VIEW ViewName
AS
SELECT DISTINCT a.Name as 'Name', ????? as 'Value', ????? as 'Number'
FROM TableA a, TableB b

Ich bin ziemlich rostig mit fortgeschrittenen SQL-Befehle. Es ist schon über 1,5 Jahre seit dem letzten war ich in etwas so weit. Ich habe versucht, etwas ähnliches wie das erste:

CREATE VIEW ViewName
AS
WITH Name AS
( SELECT DISTINCT a.Name FROM TableA a  )

Value AS
(
    SELECT DISTINCT b.Value as 'Value' FROM TableA a, TableB b
WHERE b.PrimaryKey = an.ValueA_FK
),
Number AS
(
    SELECT DISTINCT b.Value  as 'Number'
    FROM TableA a, TableB b
    WHERE a.PrimaryKey = an.ValueB_PrimaryKey
)
SELECT DISTINCT 
    * FROM Name, Value, Number

Das Ergebnis meiner völlig fehlgeschlagenen Versuch ist wie folgt:

 Name   | Value | Number
-------------------------
 NameA  | 100   | 200
 NameB  | 100   | 200
 NameA  | 100   | 456
 NameB  | 100   | 456
 NameA  | 238   | 200
 NameB  | 238   | 200
 NameA  | 238   | 456
 NameB  | 238   | 456

Nun suggestiong als das, was zum ausfüllen der Abfrage?

  • Zuerst verwenden Sie niemals implizite joins sind Sie eine SQL-antipattern. Sie sind eher worng und viel härter im Laufe der Zeit zu pflegen. Sie sind auch mehr als 20 Jahre out von date.
Schreibe einen Kommentar