如何排除2个字段不能区分的行

时间:2019-03-25 16:40:27

标签: tsql

我有一些代码,返回的结果不是预期的。

SELECT DISTINCT
T.Field_1
T.Field_2
FROM
(
    SELECT
        ...
    FROM

    UNION ALL

    SELECT
        ...
    FROM
) AS T
GROUP BY T.Field_1, T.Field_2

结果:

enter image description here

第3行必须不存在,因为Field_1和Field_2不能区分。如何使用某些SQL功能来做到这一点?

1 个答案:

答案 0 :(得分:0)

如果Field_1是唯一必须唯一的列,而您只想要每个唯一Field_1值的第一条记录,那么下面是一种实现方法。

CREATE TABLE #table (Field_1 VARCHAR(MAX), Field_2 VARCHAR(MAX))
INSERT INTO
    #table
VALUES
    ('Item A', ''),
    ('Item B', ''),
    ('Item B', 'Item A'),
    ('Item C', ''),
    ('Item D', 'Item A')

SELECT DISTINCT
    [b].[Field_1], [b].[Field_2]
FROM
    #table AS [a]
OUTER APPLY (
    SELECT TOP 1
        [Field_1], [Field_2]
    FROM
        #table AS [b]
    WHERE
        [a].[Field_1] = [b].[Field_1]
) AS [b]


DROP TABLE #table