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