联系信息彼此相关,尤其是地址和电话号码。
目标是建立一个尽可能多的场景。 客户,用户,学生,主管和员工或与标签一起使用的其他类别。
人们希望或必须在公司或组织的数据库中跟踪的联系信息可能会有很大差异,具体取决于他们的工作方式。
这是我很难解决的问题,解决这个问题的方法在网上很分散。
底部的其他来源。
tblClients:
tblAddress:
tblNumber:
tblEmail:
tblCategorys:
只要数据在表单,查询或报表中列出,此结构就会生成重复项。问题与电话号码和地址有关。 只要两个地址或具有相同类别的电话号码必须显示在列表中,就会发生冲突。嗯,这就是相信的。
如下所示,联系信息是重复的。我想防止这种情况发生。另外,我想防止电话号码显示在没有显示电话号码的记录上。 如果我在这里有任何意义,这些报告只显示家庭的私人地址和其他词语。 (Img被删除了两个声誉限制。)
如图所示,我希望报告看起来像。 我用新的tbl设计,新的查询和一点点vba实现了这个结果。这只是实验而已。 Img 2 - experimental
客户&电子邮件
SELECT tblClients.ClientID,
tblClients.ClientKey,
[tblClients].[LastName] & ", " & [tblClients].[Firstname] AS Klient,
tblClients.Startdate,
tblClients.EndDate,
[qryList(PrivateEmails)].Email,
tblClients.LastName
FROM tblClients
LEFT JOIN [qryList(PrivateEmails)]
ON tblClients.ClientID = [qryList(PrivateEmails)].ClientID;
地址&电话号码
SELECT tblAddress.ClientID,
tblAddress.Address,
tblAddress.ZIP,
tblAddress.City,
tblNumber.Number,
tblAddress.CategoryID,
tblNumber.AddressID,
tblNumber.CategoryID
FROM tblAddress
LEFT JOIN tblNumber
ON tblAddress.AddressID = tblNumber.AddressID
WHERE (((tblAddress.CategoryID)
Is Null Or (tblAddress.CategoryID)=1)
AND ((tblNumber.AddressID)
Is Null Or (tblNumber.AddressID)>=1)
AND ((tblNumber.CategoryID)
Is Null Or (tblNumber.CategoryID)=2));
最终查询
SELECT Clients.*, [qryAddress&PhoneNuber(Private)].*
FROM Clients
LEFT JOIN [qryAddress&PhoneNuber(Private)]
ON Clients.ClientID = [qryAddress&PhoneNuber(Private)].ClientID;
用于填充tblnumbers中的addressID,当用户在添加或编辑新记录时保存表单中的更改时触发。
' A Dynamic array would be usful whenever multiple addresses and phone numbers is added as private.
If IsNull(varAddressID) = 0 Then
If Me.frmAddress.Form.txtCategoryID = 1 Then
If Me.frmNumber.Form.txtCategoryID = 2 Then
Me.frmNumber.Form.txtAddressID = Me.frmAddress.Form.txtAddressID
End If
End If
End If
这是我只在想查看私人联系信息时使用的sql qry。
SELECT tblClients.ClientKey,
[tblClients].[LastName] & ". " & [tblClients].[FirstName] AS Klient,
tblClients.Startdate,
tblClients.EndDate,
[qryList(NumberPrivate)].Number,
[qryList(PrivateAddresses)].Address,
[qryList(PrivateAddresses)].ZIP,
[qryList(PrivateAddresses)].City,
[qryList(PrivateEmails)].Email
FROM ((
LEFT JOIN [qryList(PrivateEmails)]
ON tblClients.ClientID = [qryList(PrivateEmails)].
LEFT JOIN [qryList(PrivateAddresses)]
ON tblClients.ClientID = [qryList(PrivateAddresses)].
LEFT JOIN [qryList(NumberPrivate)]
ON tblClients.ClientID = [qryList(NumberPrivate)].ClientID
WHERE ((([qryList(NumberPrivate)].CategoryID) Is Null
Or ([qryList(NumberPrivate)].CategoryID)=2)
AND (([qryList(PrivateAddresses)].CategoryID) Is Null
Or ([qryList(PrivateAddresses)].CategoryID)=1)
AND (([qryList(PrivateEmails)].CategoryID) Is Null
Or ([qryList(PrivateEmails)].CategoryID)=1))
ORDER BY tblClients.ClientKey DESC,
[tblClients].[LastName] & ". " & [tblClients].[FirstName] DESC,
tblClients.Startdate,
tblClients.EndDate DESC;
具有相同或相似主题的其他来源:
http://www.sqlservercentral.com/Forums/Topic637723-361-1.aspx
答案 0 :(得分:1)
根据您要存储的数据,您的数据模型很好。
问题更多的是关于输出 - 如何查询数据,以便在我不想要的时候不会显示重复的行。
对于这个问题,有很多答案取决于你想要做什么。 (即报表上的组值(通常的解决方案),将电子邮件连接成一行,获取子对象的最大值或最小值等)。
我建议您在查询中发布另一个问题,以及您遇到的任何问题。