Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Zusammenführen von Daten aus 2 Tabellen

Um Daten über mehrere Tabellen hinweg abzufragen, möchten Sie den Tabellen beitreten . Mir ist die Beziehung zwischen Ihren beiden Tabellen nicht 100 % klar, aber wenn MedicalRecordID die richtige Beziehung ist, sollte Ihre Abfrage etwa so aussehen:

SELECT
    CONVERT(char(80), i.InvDate,3) AS InvDate,
    i.InvoiceNo,
    i.EmployerCode,
    i.TaxAmount + i.SubTotal AS Amount,
    '' AS Payment,
    pd.LastName,
    pd.GivenName
FROM
    dbo.Invoice i
        INNER JOIN dbo.PatientDetails pd ON (pd.MedicalRecordID = i.MedicalRecordID)
;

Dies funktioniert, wenn zwischen den Tabellen eine Eins-zu-eins-Beziehung besteht und immer ein PatientDetails vorhanden ist Aufzeichnung für jede Rechnung. Wenn PatientDetails optional ist, verwenden Sie dann LEFT JOIN statt INNER JOIN .

EDIT (Antwort auf Kommentar):

Ich wette, dass die DateTime-Konvertierung in Ihrer WHERE-Klausel nicht so funktioniert, wie Sie es erwarten. Angenommen, dass dtpFrom und dtpTo sind DatePicker Steuerelemente, möchten Sie wahrscheinlich das SelectedDate verwenden -Eigenschaft anstelle von Text . Außerdem würde ich dringend empfehlen, in Ihren Abfragen Parameter zu verwenden, anstatt Zeichenfolgen zu verketten. Ihr Code wird sauberer und Sie vermeiden SQL-Injection . Hier ist ein kurzes Beispiel:

using (SqlConnection connection = new SqlConnection( ... ))
{
    connection.Open();

    string sql = @"
                SELECT
                    CONVERT(char(80), i.InvDate,3) AS InvDate,
                    i.InvoiceNo,
                    i.EmployerCode,
                    i.TaxAmount + i.SubTotal AS Amount,
                    '' AS Payment,
                    pd.GivenName
                FROM
                    dbo.Invoice i
                        LEFT JOIN dbo.PatientDetails pd ON (pd.MedicalRecordID = i.MedicalRecordID)
                WHERE
                    InvDate >= @fromDate AND InvDate <= @toDate";

    SqlCommand cmd = new SqlCommand(sql, connection);
    cmd.Parameters.AddWithValue("@fromDate", dtpFrom.SelectedDate);
    cmd.Parameters.AddWithValue("@toDate", dtpTo.SelectedDate);

    using (SqlDataReader reader = cmd.ExecuteReader())
    {
        // do stuff with results
    }
}