クライアントに請求されるさまざまなレートを格納するSQLテーブルがあります。この表には、クライアントに固有のレートがない場合に使用される「デフォルト」レートのリストも含まれています。私が必要としているのは、ユーザーがコンボボックスからクライアントを選択したら、次のように、デフォルト、そのクライアントに固有のレート、またはその両方の組み合わせで構成される、そのクライアントのレートのテーブルを作成することです。
Client Type of Work Rate
ABC Ltd Type A 100
XYZ & Co Type B 150
Default Type A 125
Default Type B 175
したがって、返されるレートは次のようになります。
ABC Ltd Type A 100
Type B 175 (default)
XYZ & Co Type A 125 (default)
Type B 150
Anyone else Type A 125 (default)
Type B 175 (default)
データベース内の情報は次のように構成されています
Table for clients
Table for Types of Work
Table for Rates (foreign keys linking to clients and types of work)
SQLステートメント、winformsアプリケーションのC#ルーチン、または両方の組み合わせのいずれかを使用して、上記の結果を取得するための最良の方法を誰かが説明できますか?
PS。申し訳ありませんが、このWebサイトの表にデータを設定する方法がわかりません。
私がこれまでに試したこと
public static DataTable TableOfRates(string pIPName = "Default")
{
try
{
string sqlText1 = "SELECT RateID, IPName, RateName, Rate, DateFrom, DateTo, Active, " +
"(RateName + ': £' + CONVERT(VARCHAR, Rate) + CONVERT(VARCHAR, " +
"(CASE WHEN Active = '1' THEN ' (Active)' ELSE ' (Inactive)' END))) AS ListRate " +
"FROM tblRates WHERE IPName IS NULL AND Active = 'true';";
aSqlQuery cQ1 = new aSqlQuery(sqlText1, "table");
DataTable defaultRates = cQ1.TableResult;
string sqlText2 = "SELECT RateID, IPName, RateName, Rate, DateFrom, DateTo, Active, " +
"(RateName + ': £' + CONVERT(VARCHAR, Rate) + CONVERT(VARCHAR, " +
"(CASE WHEN Active = '1' THEN ' (Active)' ELSE ' (Inactive)' END))) AS ListRate " +
"FROM tblRates WHERE IPName = '" + pIPName + "' " +
"AND Active = 'true';";
aSqlQuery cQ2 = new aSqlQuery(sqlText2, "table");
DataTable clientRates = cQ2.TableResult;
foreach(DataRow defaultRow in defaultRates.Rows)
{
string defaultType = defaultRow["RateName"].ToString();
foreach (DataRow clientRow in clientRates.Rows)
{
string clientType = clientRow["RateName"].ToString();
if (defaultType == clientType)
{
clientRates.Rows.Add(defaultRow.ItemArray);
}
}
}
return clientRates;
}
catch (Exception eX)
{
throw new Exception("cRate: Error compiling Table Of Rates (mode = '" + pIPName + "')" + Environment.NewLine + eX.Message);
}
}
ただし、[行の追加]、[行のインポート]、または[アイテム配列の追加]のいずれを使用しても、エラーが発生します。複数のテーブルのデータ行を使用するのは好きではないようです。