我的问题只是显示两行具有相同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。我需要有两个值。
答案 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