Untuk membuat kueri data di beberapa tabel, Anda ingin bergabung dengan tabel
. Saya tidak 100% jelas tentang hubungan antara dua tabel Anda, tetapi jika MedicalRecordID adalah hubungan yang benar, maka kueri Anda akan terlihat seperti ini:
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)
;
Ini berfungsi jika ada hubungan satu-ke-satu antara tabel, dan jika selalu ada PatientDetails catatan untuk setiap faktur. Jika PatientDetails adalah opsional, lalu gunakan LEFT JOIN bukannya INNER JOIN .
EDIT (tanggapan terhadap komentar):
Saya bertaruh bahwa konversi DateTime di klausa WHERE Anda tidak berfungsi seperti yang Anda harapkan. Dengan asumsi bahwa dtpFrom dan dtpTo adalah DatePicker kontrol, Anda mungkin ingin menggunakan SelectedDate properti alih-alih Text . Juga, saya akan sangat menyarankan menggunakan parameter dalam kueri Anda daripada menggabungkan string. Kode Anda akan lebih bersih, dan Anda akan menghindari injeksi SQL
. Berikut ini contoh singkatnya:
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
}
}