Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Mesclando dados de 2 tabelas


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