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