我正在构建一个视图,通过连接几个表来通过Entity框架提取数据。由于此视图没有唯一列,因此EntityFramework无法检索正确的结果集(即第一列重复)。
为了解决这个问题,我添加了一个ID列,即ROW_NUMBER()&我的.net代码(实体)
进行了必要的更改Refer : Entity Framework. View return duplicate records
现在真正的问题让我感到震惊,因为这个ID列也赋予了早期重复行的唯一标识:|。
我想只检索不同的行而不考虑图片中的ID /标识列。
例如:
+--------+---------+-------------+-------------+
| ID | NUMBER | COUNTRY | LANG |
+--------+---------+-------------+-------------+
| 1 | 3968 | UK | English |
| 2 | 3968 | UK | English |
| 3 | 1234 | Greece | Greek |
| 4 | 1234 | Italy | Italian |
回溯应该如下:(如果我们忽略ID列,只需要从fisrt和第二行中取出一个条目,因为它们会被重复)
+--------+---------+-------------+-------------+
| 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 ...
... ...
如果需要,我可以粘贴整个查询,但这可能会使问题复杂化。 所以期待基于我的虚拟表的通用答案。
答案 0 :(得分:0)
SELECT min(id) id, number, country, lang
FROM PLAN_MASTER
GROUP BY number, country, lang
答案 1 :(得分:0)
我认为你应该使用另一个函数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
我希望你会帮助你