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