0

我有一个包含 ID 的表,带有一个备用标识符。

ID| Alternate
1 | 100000000
1 | 8471
1 | 1248

2 | 578887518
2 | 8415
2 | 3574

3 | 100000000
3 | 1248

有两种类型的备用标识符.. 9 位和 4 位。每个 ID 都有一个 9 位数字,然后最多有四个不同的 4 位数字。

我的问题是该表不是唯一的。存在类似于上述示例 ID 1 和 3 的情况。可能也存在这种情况,虽然我还没有找到一种情况,其中 9 位标识符匹配,但有不同的 4 位标识符..

ID | Alternate
5  | 200000000
5  | 1234

6  | 200000000
6  | 4567

我的目标是创建一个表,并以备用标识符值为中心,但是我目前正在为同一用户获取两行。

有人知道我将如何解决这个问题吗?
当前代码

SELECT  ID,  [THCI], [2101] , [2202], [2245] 
FROM          
    (SELECT     
        T1.[ID], 
        T1.[IDENTIFIER],
        CASE WHEN T2.[MAIN_IDENT] IS NULL THEN 'THCI' ELSE T2.[MAIN_IDENT] END AS PIV

    FROM MYTABLE T1
        LEFT OUTER JOIN TABLE2 AS T2 ON T2.[REFNO] = T1.[REFNO]
    WHERE 
        (LEN(T2.[MAIN_IDENT]) = 4 OR T2.[MAIN_IDENT] IS NULL)
        AND (LEN(T1.[IDENTIFIER]) = 4 OR LEN(T1.[IDENTIFIER]) = 9)
    ) AS SourceTable 
PIVOT (MAX([IDENTIFIER]) FOR PIV IN ([THCI], [2245], [2202], [2101],[2345],[2303])) AS MYPIV

编辑:预期的输出将是。另请注意,它是四个备用标识符,而不是三个。虽然变化不大

[ID] | [THCI]      | [2245] | [2202] | [2101] | [2345] 
1    | 100000000   | 4817   | 6824   | NULL   | 1587
2    | 845279514   | 2359   | 7847   | 1234   | NULL
3    | 415784521   | 2415   | NULL   | NULL   | 8747
4

1 回答 1

0

如果您的目标只是检索省略重复值的数据,则可以通过首先检索 9-character 的数据IDENTIFIER(按 MAX(ID) 分组)然后加入同一个表以过滤 4-character 来完成IDENTIFIER。因此,内部的 SELECT 语句将与此类似(在其上应用 PIVOT):

SELECT 
    IDENT9.ID,
    IDENT9.IDENTIFIER,
    IDENT4.IDENTIFIER
FROM
    (SELECT     
    MAX([ID]) ID, 
    [IDENTIFIER],
    FROM MYTABLE
    WHERE LEN([IDENTIFIER]) = 9
    GROUP BY [IDENTIFIER]) AS IDENT9
LEFT OUTER JOIN
    (SELECT     
    MAX([ID]) ID, 
    [IDENTIFIER],
    FROM MYTABLE
    WHERE LEN([IDENTIFIER]) = 4
    GROUP BY [IDENTIFIER]) AS IDENT4
ON IDENT4.ID = IDENT9.ID

这里的想法是在单独的列中包含 9 个字符的标识符和 4 个字符的标识符。IDENT4 和 IDENT9 视图的目的是删除重复项。

但是,如果您的目标是修复数据库完整性,那么您需要考虑将 9 个字符和 4 个字符的标识符分隔在两个单独的表中。根据您所说,我可以假设每个 ID 都有一个 9 字符标识符和至少一个(或更多)4 字符标识符。因此,您将创建一个以 IDENT9 查询为基础的包含 9 个字符 ID 的主表,以及一个“从属”4 个字符 ID 表。使用这些表,您将能够在数据库级别创建约束以执行重复检查

于 2013-01-10T04:47:32.320 回答