Als u gegevens over meerdere tabellen wilt opvragen, wilt u deelnemen aan de tabellen
. Ik ben niet 100% duidelijk over de relatie tussen uw twee tabellen, maar als MedicalRecordID is de juiste relatie, dan zou uw vraag er ongeveer zo uit moeten zien:
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)
;
Dit werkt als er een één-op-één relatie is tussen tabellen, en als er altijd een PatientDetails is registreren voor elke factuur. Als PatientDetails is optioneel, gebruik dan LEFT JOIN in plaats van INNER JOIN .
BEWERKEN (reactie op opmerking):
Ik wed dat de DateTime-conversie in uw WHERE-clausule niet werkt zoals u verwacht. Ervan uitgaande dat dtpFrom en dtpTo zijn DatePicker besturingselementen, wilt u waarschijnlijk de SelectedDate eigenschap in plaats van Text . Ik zou ook ten zeerste aanbevelen om parameters in uw query's te gebruiken in plaats van tekenreeksen samen te voegen. Uw code wordt schoner en u vermijdt SQL-injectie
. Hier is een snel voorbeeld:
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
}
}