2016-04-21 8 views
0

Können Sie mit einer Abfrage helfen Sie mir bitte, die eine Tabelle wie folgt angezeigt werden würde:Wie lautet die Abfrage für die folgende Beispieltabelle?

 
Dept_ID    Dept_Name 

10      Admin 
10      Whalen 
20      Sales 
20      James 
20      King 
20      Smith 
40      Marketing 
40      Neena 

und so weiter ... Das Schema

Anzeige der Abteilungs-ID und der Name der Abteilung und dann das ist HR nachfolgende Mitarbeiter arbeiten unter dieser Abteilung.

+0

Warum Union-all? Dies ist nur ausgewählte Abfrage –

+3

entweder dies ist eine sehr einfache Abfrage und Sie sollten nur ein Tutorial lesen, oder es ist komplizierter, dass es scheint, und Sie sollten Ihr Datenbankschema beschreiben und was Sie als Abfrage versucht, wenn Sie Hilfe benötigen. – polku

+0

Die kurze Antwort ist "nicht". Sie möchten, dass die Spalte "dept_name" sowohl den Abteilungsnamen als auch die Nachnamen der Mitarbeiter enthält? Das ist ein grundlegend gebrochenes Design. Sie sollten mindestens eine andere Spalte namens "type" haben, die erklärt, was diese Zeile beschreibt (eine Abteilung oder ein Mitarbeiter). Aber noch bessere Abteilungsnamen sollten sich in einer anderen Spalte als die Namen der Mitarbeiter befinden. Wenn dies über das Formatieren der Ergebnisse für die Anzeige ist, formatieren Sie sie in Ihrer Anwendung ... – MatBailie

Antwort

0

Wenn Sie Vereinigung zwei Datensätze ist, gibt es keine implizite Ordnung ist, können Sie die Ergebnisse in beliebiger Reihenfolge erhalten.

Die erhalten eine bestimmte Reihenfolge Sie müssen verwenden ORDER BY.

Um ORDER BY zu verwenden, müssen Sie Felder haben, um diese Reihenfolge zu tun.

In Ihrem Fall würde der Pseudo-Code sein ...
- ORDER BY [dept_id], [depts-then-employees], [dept_name]

Der mittlere dieser drei ist etwas, das Sie erstellen wollen müssen.

Eine Möglichkeit, das zu tun, ist wie folgt.

note: Nur weil Sie ein Feld haben, indem zu bestellen, bedeutet nicht, dass Sie sie auswählen müssen.

SELECT 
    dept_id, 
    dept_name 
FROM 
(
    SELECT 
     d.dept_id, 
     d.dept_name, 
     0 AS entity_type_ordinal 
    FROM 
     department d 

    UNION ALL 

    SELECT 
     d.dept_id, 
     e.employee_name, 
     1 AS entity_type_ordinal 
    FROM 
     department d 
    INNER JOIN 
     employee  e 
      ON e.dept_id = d.dept_id 
) 
    dept_and_emp 
ORDER BY 
    dept_id, 
    entity_type_ordinal, 
    dept_name 
+0

Vielen Dank Mat! Ich habe das in einem Test und ich hatte absolut keine Ahnung und ich habe seitdem mein Gehirn gehackt:/ Ist das etwas mit Erfahrung oder war es einfach und ich verstehe es einfach nicht? Ist es ein Low-Level-Code? –

+0

@AsimKhan - Wenn eine der Antworten hier geholfen hat, bitte stimme sie ab und/oder markiere sie als akzeptierte Antworten :) Wie für low-level oder schwierig, ist der schwierigste Teil zu verstehen, dass in SQL das nie ist *** eine inhärente Reihenfolge der Daten, müssen Sie 'ORDER BY' verwenden und Sie müssen * etwas * haben, um die Bestellung zu erledigen. Ich würde sagen, das ist eine einfache bis mittlere Komplexität. – MatBailie

1
SELECT Dept_ID, Dept_Name 
FROM Your_Table 

Einfach wie ich es schaffen kann. Es ist sehr schwierig (fast unmöglich) genau zu sagen, was die Abfrage sein sollte, ohne mehr Details in Bezug auf Ihre Tabellenstruktur und einige Beispieldaten.

Von Ihrer Bearbeitung, brauchen Sie vielleicht etwas mehr so;

Dies zeigt die Mitarbeiter in jeder Abteilung in der nächsten Spalte, Sie wollen nicht wirklich alles in der gleichen Spalte.

+0

Nicht so einfach plus, dass die Ausgabe nicht erforderlich ist ... –

+0

Ich erwartete so viel Asim, bitte bearbeiten Sie Ihren Beitrag mit mehr Details, wie ich in meiner Antwort beschrieben habe und ich werde es entsprechend bearbeiten. – William

+2

@AsimKhan - Für jeden, der * irgendwelche * Hoffnung hat, Ihnen zu helfen, müssen Sie mehr Informationen geben. "produziert nicht die erforderliche Ausgabe" ist äußerst wenig hilfreich, es sei denn, Sie erklären, welche Ausgabe Sie erhalten haben und auf welche Weise es nicht das war, was Sie erwartet haben. Was deine Frage betrifft; Sie müssen uns sagen, welche Tabellen Sie haben, wie sie zusammenhängen, und wie wichtig das gewünschte Ergebnisbeispiel ist (Reihenfolge, Formatierung usw.). Sie können auch sagen: Ich muss gewinnen, ohne zu erklären, welches Spiel Sie spielen. – MatBailie

0

Angenommen, es gibt eine Tabelle in Ihrer Datenbank departments genannt, die diese Informationen hält, könnte Ihr Code wie folgt aussehen:

select 
    dept_id, dept_name 
from 
    departments 
0

Wenn Sie bestimmte Spalten der Tabelle angezeigt werden sollen, wie Sie in der Frage oben gefragt können Sie die folgende Syntax verwenden:

wählen column_names von table_name

re Ort:

  1. column_names mit den Spaltennamen, die Sie von einem mit dem Namen der Tabelle, deren Spalten Sie anzeigen möchten

    für die obige Frage, der folgende Code Koma 2.table_name wollen getrennt angezeigt werden tun:

wählen dept_id, Dept_Name von Abteilung;

Der obige Code funktioniert, wenn Ihre Tabellennamen ‚Abteilung‘

Verwandte Themen