簡體   English   中英

SQL:按所有列選擇不同的行,但忽略一列(例如ID列)

[英]SQL : Select Distinct rows by all columns but omit one column (say ID column)

我通過連接幾個表以通過Entity Framework提取數據來構建視圖。 由於此視圖沒有唯一列,因此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     |

檢索應該像這樣進行:(如果忽略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 ...

……

如果需要,我可以粘貼整個查詢,但這會使問題復雜化。 因此,期待基於我的虛擬表的通用答案。

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

希望thiw能幫到你

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM