एकाधिक तालिकाओं में डेटा क्वेरी करने के लिए, आप तालिकाओं में शामिल होना
चाहते हैं . मैं आपकी दो तालिकाओं के बीच संबंध पर 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
. के बजाय ।
संपादित करें (टिप्पणी की प्रतिक्रिया):
मैं शर्त लगा रहा हूं कि आपके 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
}
}