Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Обединяване на данни от 2 таблици

За да заявите данни в множество таблици, трябва да съедините таблиците . Не съм на 100% ясна връзката между вашите две таблици, но ако MedicalRecordID е правилната връзка, тогава вашата заявка трябва да изглежда по следния начин:

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)
;

Това работи, ако има връзка едно към едно между таблиците и ако винаги има PatientDetails запис за всяка фактура. Ако PatientDetails не е задължително, тогава използвайте LEFT JOIN вместо INNER JOIN .

РЕДАКТИРАНЕ (отговор на коментар):

Обзалагам се, че преобразуването на DateTime във вашата клауза WHERE не работи по начина, по който очаквате. Ако приемем, че dtpFrom и dtpTo са DatePicker контроли, вероятно искате да използвате SelectedDate свойство вместо Text . Също така силно бих препоръчал да използвате параметри във вашите заявки, вместо да свързвате низове. Вашият код ще бъде по-чист и ще избегнете SQL инжектиране . Ето бърз пример:

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server и уязвимостите Spectre/Meltdown

  2. Задължителен първичен ключ за Sql сървър

  3. SQL:използвайте WHERE клауза в OVER()?

  4. Избройте всички бази данни от свързан сървър в SQL Server (T-SQL примери)

  5. Използвайте Excel 2010 за четене/запис в база данни на SQL Server 2008 с помощта на съхранени процедури