选择具有相同ID但在另一列中具有不同值的行

jos*_*ker 41 sql

我试了几个小时并阅读了很多帖子,但我仍然无法弄清楚如何处理这个请求:

我有这样一张桌子:

+------+------+
|ARIDNR|LIEFNR|
+------+------+
|1     |A     |
+------+------+
|2     |A     |
+------+------+
|3     |A     |
+------+------+
|1     |B     |
+------+------+
|2     |B     |
+------+------+
Run Code Online (Sandbox Code Playgroud)

我想选择使用不同LIEFNR不止一次出现的ARIDNR.

输出应该是这样的:

+------+------+
|ARIDNR|LIEFNR|
+------+------+
|1     |A     |
+------+------+
|1     |B     |
+------+------+
|2     |A     |
+------+------+
|2     |B     |
+------+------+
Run Code Online (Sandbox Code Playgroud)

Yuc*_*uck 53

这应该这样做:

SELECT *
FROM YourTable
WHERE ARIDNR IN (
    SELECT ARIDNR
    FROM YourTable
    GROUP BY ARIDNR
    HAVING COUNT(*) > 1
)
Run Code Online (Sandbox Code Playgroud)

我们的想法是使用内部查询来识别在数据ARIDNR中出现1次以上值的记录,然后根据该组值从同一个表中获取所有列.

  • 是的,但他只希望拥有与LIEFNR不同的人 (7认同)

Has*_*man 38

请试试这个.我检查了它,它正在工作:

SELECT *
FROM Table
WHERE ARIDNR IN (
    SELECT ARIDNR
    FROM Table
    GROUP BY ARIDNR
    HAVING COUNT(distinct LIEFNR) > 1
)
Run Code Online (Sandbox Code Playgroud)

  • 我想这应该是可接受的答案,因为你真的在特定列中寻找差异,而不是在任何列中 (7认同)

Seg*_*ult 11

加入同一个表回到自己.使用内部联接,以便丢弃不匹配的行.在连接集中,将在表中的另一行中具有匹配的ARIDNR的行具有不同的LIEFNR.允许那些ARIDNR出现在最终集中.

SELECT * FROM YourTable WHERE ARIDNR IN (
    SELECT a.ARIDNR FROM YourTable a
    JOIN YourTable b on b.ARIDNR = a.ARIDNR AND b.LIEFNR <> a.LIEFNR
)
Run Code Online (Sandbox Code Playgroud)