Om du vill söka efter data över flera tabeller vill du gå med i tabellerna
. Jag är inte 100 % klar över förhållandet mellan dina två tabeller, men om MedicalRecordID
är det korrekta förhållandet bör din fråga se ut ungefär så här:
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)
;
Detta fungerar om det finns en en-till-en-relation mellan tabeller och om det alltid finns en PatientDetails
rekord för varje faktura. Om PatientDetails
är valfritt, använd sedan LEFT JOIN
istället för INNER JOIN
.
EDIT (svar på kommentar):
Jag slår vad om att DateTime-konverteringen i din WHERE-klausul inte fungerar som du förväntar dig. Förutsatt att dtpFrom
och dtpTo
är DatePicker
kontroller vill du förmodligen använda SelectedDate
egenskap istället för Text
. Jag skulle också starkt rekommendera att använda parametrar i dina frågor snarare än att sammanfoga strängar. Din kod blir renare och du slipper SQL-injektion
. Här är ett snabbt exempel:
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
}
}