За да заявите данни в множество таблици, трябва да съедините таблиците
. Не съм на 100% ясна връзката между вашите две таблици, но ако MedicalRecordID
е правилната връзка, тогава вашата заявка трябва да изглежда по следния начин:
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)
;
Това работи, ако има връзка едно към едно между таблиците и ако винаги има PatientDetails
запис за всяка фактура. Ако PatientDetails
не е задължително, тогава използвайте LEFT JOIN
вместо INNER JOIN
.
РЕДАКТИРАНЕ (отговор на коментар):
Обзалагам се, че преобразуването на DateTime във вашата клауза WHERE не работи по начина, по който очаквате. Ако приемем, че dtpFrom
и dtpTo
са DatePicker
контроли, вероятно искате да използвате SelectedDate
свойство вместо Text
. Също така силно бих препоръчал да използвате параметри във вашите заявки, вместо да свързвате низове. Вашият код ще бъде по-чист и ще избегнете SQL инжектиране
. Ето бърз пример:
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
}
}