Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Unione di dati da 2 tabelle

Per eseguire query sui dati su più tabelle, si desidera unirsi alle tabelle . Non sono chiaro al 100% sulla relazione tra le tue due tabelle, ma se MedicalRecordID è la relazione corretta, la tua query dovrebbe assomigliare a questa:

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)
;

Funziona se c'è una relazione uno-a-uno tra le tabelle e se c'è sempre un PatientDetails record per ogni fattura. Se PatientDetails è facoltativo, quindi usa LEFT JOIN invece di INNER JOIN .

EDIT (risposta al commento):

Scommetto che la conversione DateTime nella tua clausola WHERE non funziona come ti aspetti. Supponendo che dtpFrom e dtpTo sono DatePicker controlli, probabilmente vorrai usare SelectedDate proprietà invece di Text . Inoltre, consiglio vivamente di utilizzare i parametri nelle query anziché concatenare le stringhe. Il tuo codice sarà più pulito ed eviterai SQL injection . Ecco un rapido esempio:

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
    }
}