sql >> Base de Datos >  >> RDS >> Sqlserver

Fusionando datos de 2 tablas

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