首页 > 解决方案 > 自加入:如何选择一组特定的数据

问题描述

我有一个简单的数据表

在此处输入图像描述

我们可以看到第 1 行和第 2 行包含完全相同的 ColumnA、ColumnB 和 ColumnC。我想形成一个简单的选择,可以忽略我们已经有一个是的'N'值,所以像

在此处输入图像描述

我尝试使用自加入,但猜测没有正确使用它或可能没有使用正确的东西。

有人可以在这里提出一点建议吗?

这就是我正在尝试的

SELECT
*
FROM
    [Table] AS main 
    INNER JOIN [Table] AS sub ON
        sub.columna = main.columna
        and
        sub.columnb = main.columnb
        and
        sub.columnc = main.columnc
WHERE
    -- This is where I am struggling to add a condition:
    ((main.columnd = 'Y'
    AND
    sub.columnd = 'Y')
    OR
    (main.columnd = 'N'
    AND
    sub.columnd = 'Y'))

标签: sqlsql-server

解决方案


我不确定您的真实数据是什么样的,但这里有一个简单的方法:

DECLARE @Table TABLE (
    ColumnA VARCHAR(2), ColumnB VARCHAR(2), ColumnC VARCHAR(2), ColumnD VARCHAR(1)
);

INSERT INTO @Table ( ColumnA, ColumnB, ColumnC, ColumnD ) VALUES
    ( 'AA', 'BA', 'CA', 'Y' ), ( 'AA', 'BA', 'CA', 'N' ), ( 'BB', 'CD', 'DA', 'N' ), ( 'CC', 'GH', 'IJ', 'Y' );

SELECT
    ColumnA, ColumnB, ColumnC, MAX ( ColumnD ) AS ColumnD
FROM @Table AS t1
GROUP BY
    ColumnA, ColumnB, ColumnC;

退货

+---------+---------+---------+---------+
| ColumnA | ColumnB | ColumnC | ColumnD |
+---------+---------+---------+---------+
| AA      | BA      | CA      | Y       |
| BB      | CD      | DA      | N       |
| CC      | GH      | IJ      | Y       |
+---------+---------+---------+---------+ 

推荐阅读