Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Hợp nhất dữ liệu từ 2 bảng

Để truy vấn dữ liệu trên nhiều bảng, bạn muốn tham gia các bảng . Tôi không rõ ràng 100% về mối quan hệ giữa hai bảng của bạn, nhưng nếu MedicalRecordID là mối quan hệ chính xác, thì truy vấn của bạn sẽ trông giống như sau:

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

Điều này hoạt động nếu có mối quan hệ 1-1 giữa các bảng và nếu luôn có PatientDetails ghi lại cho từng hóa đơn. If PatientDetails là tùy chọn, sau đó sử dụng LEFT JOIN thay vì INNER JOIN .

CHỈNH SỬA (phản hồi cho nhận xét):

Tôi cá rằng chuyển đổi DateTime trong mệnh đề WHERE của bạn không hoạt động theo cách bạn mong đợi. Giả sử rằng dtpFromdtpToDatePicker , bạn có thể muốn sử dụng SelectedDate thuộc tính thay vì Text . Ngoài ra, tôi thực sự khuyên bạn nên sử dụng các tham số trong truy vấn của bạn hơn là nối các chuỗi. Mã của bạn sẽ sạch hơn và bạn sẽ tránh được chèn SQL . Đây là một ví dụ nhanh:

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. Gói điều chỉnh Spotlight Cơ bản:Công cụ tối ưu hóa SQL miễn phí tốt nhất

  2. Kiến trúc SQL Server AlwaysOn (Nhóm khả dụng) và Cài đặt từng bước -3 Thất bại thủ công qua các bước

  3. Cách chuyển đổi chuỗi thành ngày / giờ trong SQL Server bằng cách sử dụng PARSE ()

  4. Tại sao UDF lại chậm hơn nhiều so với truy vấn con?

  5. Cách tổng hợp trường thời gian trong SQL Server