Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Scalanie danych z 2 tabel

Aby wysyłać zapytania do danych w wielu tabelach, dołącz do tabel . Nie jestem w 100% jasny co do relacji między twoimi dwoma stołami, ale jeśli MedicalRecordID jest poprawną relacją, zapytanie powinno wyglądać mniej więcej tak:

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

Działa to, jeśli istnieje relacja jeden do jednego między tabelami i jeśli zawsze istnieje PatientDetails rekord dla każdej faktury. Jeśli PatientDetails jest opcjonalne, użyj LEFT JOIN zamiast INNER JOIN .

EDYTUJ (odpowiedź na komentarz):

Założę się, że konwersja DateTime w klauzuli WHERE nie działa tak, jak oczekujesz. Zakładając, że dtpFrom i dtpToDatePicker kontroli, prawdopodobnie chcesz użyć SelectedDate właściwość zamiast Text . Ponadto zdecydowanie zalecałbym używanie parametrów w zapytaniach, a nie łączenie ciągów. Twój kod będzie czystszy i unikniesz wstrzyknięcia SQL . Oto krótki przykład:

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. Baza danych, która może obsłużyć>500 milionów wierszy

  2. SQL Server 2008:Mam 1000 tabel, muszę wiedzieć, które tabele zawierają dane

  3. Wstawianie zbiorcze programu SQL Server — część 2

  4. Różnica czasu wykonania procedury składowanej SQL

  5. LINQ + TransactionScope nie zmieni poziomu izolacji w programie SQL Server Profiler