Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Fusionner les données de 2 tables

Pour interroger des données sur plusieurs tables, vous souhaitez joindre les tables . Je ne suis pas sûr à 100 % de la relation entre vos deux tables, mais si MedicalRecordID est la bonne relation, votre requête devrait ressembler à ceci :

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

Cela fonctionne s'il existe une relation un-à-un entre les tables, et s'il y a toujours un PatientDetails enregistrement pour chaque facture. Si PatientDetails est facultatif, alors utilisez LEFT JOIN au lieu de INNER JOIN .

EDIT (réponse au commentaire) :

Je parie que la conversion DateTime dans votre clause WHERE ne fonctionne pas comme prévu. En supposant que dtpFrom et dtpTo sont DatePicker contrôles, vous voudrez probablement utiliser le SelectedDate propriété au lieu de Text . De plus, je vous recommande fortement d'utiliser des paramètres dans vos requêtes plutôt que de concaténer des chaînes. Votre code sera plus propre et vous éviterez l'l'injection SQL . Voici un exemple rapide :

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