SQL :选择按所有列分隔行,但省略一列(例如 ID 列)

本文关键字:ID 例如 一列 选择 隔行 SQL | 更新日期: 2023-09-27 17:56:26

我正在通过连接几个表来构造视图,以通过实体框架提取数据。由于此视图没有唯一列,因此 EntityFramework 无法检索正确的结果集(即第一列被重复)。

为了解决这个问题,我添加了一个 ID 列,即 ROW_NUMBER() 并对我的 .net 代码(实体)进行了必要的更改

请参阅:实体框架。查看返回重复记录

现在真正的问题击中了我,因为这个 ID 列也将唯一标识归因于早期的重复行:|。

我只想检索不同的行,而不考虑图片中的此ID/身份列。

例如:

+--------+---------+-------------+-------------+
| ID     | NUMBER  | COUNTRY     | LANG        |
+--------+---------+-------------+-------------+
| 1      | 3968    | UK          | English     |
| 2      | 3968    | UK          | English     |
| 3      | 1234    | Greece      | Greek       |
| 4      | 1234    | Italy       | Italian     |

rerival 应该像这样发生:(如果我们忽略 ID 列,只需从第一行和第二行中取出一个条目,因为它们是重复的)

+--------+---------+-------------+-------------+
| ID     | NUMBER  | COUNTRY     | LANG        |
+--------+---------+-------------+-------------+
| 1      | 3968    | UK          | English     |
| 3      | 1234    | Greece      | Greek       |
| 4      | 1234    | Italy       | Italian     |

我在上面使用了一些虚拟列来轻松说明我的问题,否则我的真实查询如下所示:

Create VIEW [dbo].[vw_PlanDetails]
AS
SELECT **DISTINCT** ROW_NUMBER() OVER (ORDER BY PLAN_CODE_LONG) ID, PM.PLAN_CODE_LONG,     SA.SERVICE_AREA_NAME, SAC.COUNTY_NAME
FROM             PLAN_MASTER AS PM INNER JOIN ...

。...

如果需要,我可以粘贴整个查询,但这可能会使问题复杂化。所以期待基于我的虚拟表格的通用答案。

SQL :选择按所有列分隔行,但省略一列(例如 ID 列)

SELECT min(id) id, number, country, lang
FROM PLAN_MASTER
GROUP BY number, country, lang

我认为你应该使用另一个函数DENSE_RANK(),然后像这样使用row_number函数:

SELECT *
FROM(
SELECT 
ROW_NUMBER() OVER (ORDER BY PLAN_CODE_LONG) ROW_NUMBER_ID
,DENSE_RANK() OVER (ORDER BY PLAN_CODE_LONG) DENSE_RANK_ID
,PM.PLAN_CODE_LONG,     SA.SERVICE_AREA_NAME, SAC.COUNTY_NAME
FROM             PLAN_MASTER AS PM INNER JOIN ...
) AS Temp
WHERE 
ROW_NUMBER_ID = DENSE_RANK_ID

我希望能帮助你