SQL MS Access只显示2个具有相同ID

时间:2017-05-03 09:24:31

标签: sql ms-access

我的问题只是显示两行具有相同ID的数据。

我的表格如下:

------------------------------
- FlatDestID - Trefferspalte -
- 444555666  -       K       -
- 444555666  -       1       -
- 444555666  -       1       -
- 111222333  -       K       -
- 111222333  -       1       -
- 111222333  -       1       -
------------------------------

我想让我的表像这样

------------------------------
- FlatDestID - Trefferspalte -
- 444555666  -       K       -
- 444555666  -       1       -
- 111222333  -       K       -
- 111222333  -       1       -
------------------------------

有时候,我有相同的身份证四到五次。我只是想在第二个例子中显示每个FlatDestId的前两个数据。这意味着如果你有相同FlatDestId的5倍,那么只需用" Trefferspalte = K"显示FlatDestId。然后是具有相同FlatDestId和" Trefferspalte = 1"

的secon数据

我希望你能理解我的问题以及我需要解决的问题。

来自德国的致辞

----------编辑----------

我有" Trefferspalte"值K和1-6,我想看到总是K,然后另一个FlatDestId看1或2或3或4或5或6!

解决方案DISTINCT显示FlatDestId和Trefferspalte,其中包含FlatDestId存在的所有值,而不是K和任何Trefferspalte。我需要有两个值。

3 个答案:

答案 0 :(得分:3)

Access不像很多嵌套的SQL查询,所以首先用这个SQL创建一个Query:

SELECT K.FlatDestID, T.AnyTrefferspalte
FROM
(
    SELECT DISTINCT FlatDestID 
    FROM <yourTable>
    WHERE Trefferspalte = 'K'
) K 
INNER JOIN
(
    SELECT FlatDestID, MIN(Trefferspalte) AS AnyTrefferspalte
    FROM <yourTable>
    WHERE Trefferspalte <> 'K'
    GROUP BY FlatDestID
) T
ON K.FlatDestID = T.FlatDestID

我们的目标是了解哪些 FlatDestID 两者 a&#39; K&#39; Trefferspalte 任何其他行。如果有多个非K Trefferspalte ,这里有MIN(Trefferspalte),我选择保留其最小值。您可以将其更改为MAX()以保持较高的值,或更改为FIRST()以保持遇到的第一个,这实际上意味着随机

按您的意愿命名您的查询,我选择了 TempQuery

然后,此查询应该为您提供预期的结果:

SELECT FlatDestID, 'K' AS Trefferspalte FROM TempQuery
UNION ALL
SELECT FlatDestID, AnyTrefferspalte AS Trefferspalte FROM TempQuery
ORDER BY FlatDestID

侧面说明:您的桌面结构很奇怪,需要进行严格的重新设计,以避免让您头疼。主键将是一个良好的开端。

答案 1 :(得分:0)

利用DISTINCT删除重复项,这将显示您的2行。当你有超过2个不同的Trefferspalte值时,你将不得不使用其他一些方法。

SELECT DISTINCT FlastDestID, Trefferspalte
FROM <yourTable>

答案 2 :(得分:0)

您可能希望将这两列作为主键,以便在收到重复值时抛出错误(因此您不会将其保存在表中)。如果这是现有的设置而你无法做任何事情,请尝试DISTINCT。如果它无法正常工作,请尝试对其进行分组(您只需在查询中添加新列:

SELECT FlatDestID, Trefferspalte, COUNT(*) FROM YourTable GROUP BY FlatDestID, Trefferspalte