複数のテーブルにわたってデータをクエリするには、テーブルを結合
します。 . 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) ;
プレ>これは、テーブル間に 1 対 1 の関係があり、常に
PatientDetails
がある場合に機能します。 請求書ごとに記録します。PatientDetails
の場合 オプションです。その場合はLEFT JOIN
を使用しますINNER JOIN
の代わりに .編集 (コメントへの返信):
WHERE 句の DateTime 変換が期待どおりに機能していないことは間違いありません。
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 } }
プレ>