Per eseguire query sui dati su più tabelle, si desidera unirsi alle tabelle
. Non sono chiaro al 100% sulla relazione tra le tue due tabelle, ma se MedicalRecordID
è la relazione corretta, la tua query dovrebbe assomigliare a questa:
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)
;
Funziona se c'è una relazione uno-a-uno tra le tabelle e se c'è sempre un PatientDetails
record per ogni fattura. Se PatientDetails
è facoltativo, quindi usa LEFT JOIN
invece di INNER JOIN
.
EDIT (risposta al commento):
Scommetto che la conversione DateTime nella tua clausola WHERE non funziona come ti aspetti. Supponendo che dtpFrom
e dtpTo
sono DatePicker
controlli, probabilmente vorrai usare SelectedDate
proprietà invece di Text
. Inoltre, consiglio vivamente di utilizzare i parametri nelle query anziché concatenare le stringhe. Il tuo codice sarà più pulito ed eviterai SQL injection
. Ecco un rapido esempio:
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
}
}