我应该创建一个视图还是另一个表?

时间:2013-06-05 02:38:40

标签: c# winforms linq-to-sql datagridview

首先,作为免责声明,我通过C#间接了解SQL / LINQ。我真的非常环保。我很快就厌倦了使用充满数据的样本数据库并在最简单的情况下进行查询。信息是以这种方式呈现的,因为重点是C#和可视化编程,而不是SQL的毛茸茸甚至是LINQ。

即便如此,我还是决定使用文本(CSV)文件转换一个简单的应用程序进行存储。该应用程序跟踪三个可能的应付款,其中给定日期将存在0-3个记录。我能够为每个合同创建数据库和单独的表,并构建一个应用程序,使用LINQ to SQL类将现有记录插入到数据库中。

现在我有另一个应用程序,用于通过合同计算器或直接通过BindingSourceNavigator和DataGridView添加条目。每个表共有四列 - Date,GrossPay,TaxAmount和NetPay,Date是主键。我希望按日期查看记录,其中包含TotalGross,TotalTax,TotalNet以及该日期GrossPay每个合约表的列。

对此有何正确的解决方法 - 视图,LINQ查询,单独的表或其他?似乎一张桌子将是“最简单的”,至少在我的能力方面,但似乎是不必要的复制记录。我试图“链接”表格,但没有其他列保证是唯一的或主要的。

任何建议都会很棒。

<小时/> 的澄清:

三个表的格式为:

|日期| GrossPay | TaxAmount | NetPay | ......每个人都有其他共同点...... |

**每个表都有用于根据合同类型计算公共列的特定数据



我想查看按日期“分组”的所有记录,以便每个记录表示如下:

|日期| TotalGross | TotalTax | TotalNet | Table1Gross | Table2Gross |表3总计|

**“总计”列是共享日期的所有记录的相应列的总和。

**“表( n )Gross”中的一个或两个可能为零


1 个答案:

答案 0 :(得分:0)

我想你问的是,你是否可以按日期从三个不同的表中选择他们共有的列的记录?

如果是这样,你需要做一个工会。

在您的情况下,它可能在SQL中看起来像这样。请注意,我已经创建了一个虚拟列来表示记录的来源(您可能需要)

SELECT Date, GrossPay, TaxAmount, NetPay, 'Table1' as Source FROM Table1
UNION
SELECT Date, GrossPay, TaxAmount, NetPay, 'Table2' as Source FROM Table2
UNION
SELECT Date, GrossPay, TaxAmount, NetPay, 'Table3' as Source FROM Table3
WHERE Date = '2013-05-05'

我不打扰视图,绝对不会使用单独的表复制您的数据。