Para consultar datos en varias tablas, debe unirse a las tablas
. No estoy 100% claro sobre la relación entre sus dos tablas, pero si MedicalRecordID
es la relación correcta, entonces su consulta debería verse así:
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)
;
Esto funciona si hay una relación uno a uno entre las tablas y si siempre hay un PatientDetails
registro de cada factura. Si PatientDetails
es opcional, luego use LEFT JOIN
en lugar de INNER JOIN
.
EDITAR (respuesta al comentario):
Apuesto a que la conversión DateTime en su cláusula WHERE no funciona de la manera esperada. Suponiendo que dtpFrom
y dtpTo
son DatePicker
controles, probablemente quiera usar el SelectedDate
propiedad en lugar de Text
. Además, recomendaría encarecidamente usar parámetros en sus consultas en lugar de concatenar cadenas. Su código será más limpio y evitará la inyección SQL
. He aquí un ejemplo 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
}
}