For at forespørge data på tværs af flere tabeller, vil du tilslutte dig tabellerne
. Jeg er ikke 100 % klar over forholdet mellem dine to tabeller, men hvis MedicalRecordID
er det korrekte forhold, så skulle din forespørgsel se nogenlunde sådan ud:
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)
;
Dette virker, hvis der er et en-til-en forhold mellem tabeller, og hvis der altid er en PatientDetails
registrering for hver faktura. Hvis PatientDetails
er valgfri, så brug LEFT JOIN
i stedet for INNER JOIN
.
EDIT (svar på kommentar):
Jeg satser på, at DateTime-konverteringen i din WHERE-klausul ikke fungerer, som du forventer. Forudsat at dtpFrom
og dtpTo
er DatePicker
kontroller, vil du sandsynligvis bruge SelectedDate
egenskab i stedet for Text
. Jeg vil også varmt anbefale at bruge parametre i dine forespørgsler i stedet for at sammenkæde strenge. Din kode bliver renere, og du undgår SQL-injektion
. Her er et hurtigt eksempel:
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
}
}