Chcete-li se dotazovat na data ve více tabulkách, chcete spojit tabulky
. Není mi 100% jasný vztah mezi vašimi dvěma tabulkami, ale pokud MedicalRecordID
je správný vztah, pak by váš dotaz měl vypadat nějak takto:
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)
;
Funguje to, pokud mezi tabulkami existuje vztah jedna ku jedné a pokud vždy existuje PatientDetails
záznam pro každou fakturu. Pokud PatientDetails
je nepovinné, pak použijte LEFT JOIN
namísto INNER JOIN
.
UPRAVIT (reakce na komentář):
Vsadím se, že převod DateTime ve vaší klauzuli WHERE nefunguje tak, jak očekáváte. Za předpokladu, že dtpFrom
a dtpTo
jsou DatePicker
pravděpodobně budete chtít použít SelectedDate
vlastnost namísto Text
. Také bych velmi doporučil používat parametry ve vašich dotazech spíše než zřetězení řetězců. Váš kód bude čistší a vyhnete se vkládání SQL
. Zde je rychlý příklad:
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
}
}