2012-04-09 260 views
0

免责声明 - 我对SQL Server的了解有限。所以我提前道歉,如果这是一个'愚蠢'的问题。SQL Server查询和重复

查询的目的 - 从我们公司使用的程序中的多表数据库中收集信息并将结果存入我们的网络数据库,以便显示一些信息。

问题 - 重复信息。部分问题是数据库中有多个人员实例,所以会出现重复的结果......而其他重复来自联接。我需要将结果合并,以便仅使用相同的名称或代码(ID)存储一个结果。我想结合其余的信息,以便我不会丢失任何可能需要的信息。

这里是我的查询有:

SELECT people.Code AS [athlete-id], 
    people.Name AS [athlete-name], 
    people.DOB AS [DOB], 
    people.Division AS [agency-id], 
    certifs.[Expiration date] AS [expiration-date], 
    groups.Name AS [agency-name], 
    address.Addresses AS [address], 
    address.City AS [city], 
    address.State AS [state], 
    case when tags.Field = 'ABJD86GHKXXQWA9Q' 
     then tags.Value 
    end AS [restrictions], 
    case when tags.Field = 'VH2C78N9A15S059T' 
     then tags.Value 
    end AS [comments] 
FROM people 
LEFT OUTER JOIN certifs 
    ON people.Code = certifs.Owner 
LEFT OUTER JOIN groups 
    ON people.Division = groups.Code 
LEFT OUTER JOIN address 
    ON people.Code = address.Owner 
LEFT OUTER JOIN tags 
    ON people.Code = tags.Owner 
ORDER BY [agency-name], [athlete-name] 

让我知道你可能有任何问题。我很感激帮助。

+0

你为什么把它存入单独的数据库?你应该可以直接查询SQL Server数据库本身......另外,考虑到你引用'tags.Field'的方式,你似乎期望重复的行 - 将该子句添加为'JOIN'条件的一部分(并使用两个引用表,而不是一个)。如果你有重复的人员数据,那么这个问题应该单独解决。 – 2012-04-09 15:13:05

+0

你能否澄清你的意思是“人的多个实例”?这是否意味着具有相同名称或代码或两者的行? “我希望合并的其他信息”是什么意思? – PepperBob 2012-04-09 15:52:16

+0

他们需要存入一个单独的数据库,因为他们存在的地方不是可以从网络访问的数据库。一个cron作业运行...打开防火墙窗口...然后将信息转储到单独的数据库中。 “人员的多个实例” - 示例:名称:Bill Jones ID:12345 ...对于返回的20个结果是相同的...但是结果将返回其他字段的多个不同日期,如地址(由于地址更改)或评论,因为多个评论。 – 2012-04-09 16:41:32

回答

0

如果在SELECT之后和people.Code之前插入DISTINCT,那么该怎么办?

SELECT DISTINCT 
people.Code [...] 
+0

我试过了,但我选择的一些列是ntext。哪些不可比。 – 2012-04-09 14:29:02

+0

好的...所以我在选择期间将ntext语句转换为varchar以摆脱使用不同的错误...但我仍然得到重复。 – 2012-04-09 14:47:15

+0

你可以尝试“从人,certifs,组,地址,标签哪里people.Code = certifs.Owner和people.Division = groups.code和people.code = address.Owner和people.Code = tags.Owner ORDER BY [agency-name],[athlete-name]“,看你的引擎是否可以处理它 – CosminO 2012-04-09 14:48:57