Para consultar dados em várias tabelas, você deseja juntar as tabelas . Não estou 100% claro sobre a relação entre suas duas tabelas, mas se
MedicalRecordID
é o relacionamento correto, sua consulta deve ser algo assim: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)
;
Isso funciona se houver um relacionamento um para um entre as tabelas e se sempre houver um
PatientDetails
registro para cada fatura. Se PatientDetails
é opcional, então use LEFT JOIN
em vez de INNER JOIN
. EDITAR (resposta ao comentário):
Aposto que a conversão de DateTime em sua cláusula WHERE não está funcionando da maneira que você espera. Supondo que
dtpFrom
e dtpTo
são DatePicker
controles, você provavelmente quer usar o SelectedDate
propriedade em vez de Text
. Além disso, eu recomendo usar parâmetros em suas consultas em vez de concatenar strings. Seu código ficará mais limpo e você evitará a injeção de SQL
. Aqui está um exemplo rápido: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
}
}