我有一個查詢,我簡化了我們的目的。你如何達到這個結果?在t-sql中需要一個簡單的查詢
ID OrigId
----------
1 1
2 1
3 3
4 4
5 4
6 6
Result
ID OrigId
----------
1 1
2 1
4 4
5 4
我有一個查詢,我簡化了我們的目的。你如何達到這個結果?在t-sql中需要一個簡單的查詢
ID OrigId
----------
1 1
2 1
3 3
4 4
5 4
6 6
Result
ID OrigId
----------
1 1
2 1
4 4
5 4
您可以使用HAVING語句
SELECT *
FROM dbo.Table
WHERE OrigID IN
(
SELECT OrigID
FROM dbo.Table
GROUP BY OrigID
HAVING COUNT(*) > 1
)
要帶回其中相應的OrigId
多次出現在表中的所有行,你可以使用
;WITH CTE AS
(
SELECT *,
COUNT(*) OVER (PARTITION BY OrigId) AS C
FROM YourTable
)
SELECT ID,
OrigId
FROM CTE
WHERE C >1
+1正如我自己寫的那樣:()格式):-) – xanatos
select *
from selecttest
where origid in
(
select origid
from selecttest
group by origid
having COUNT(*) > 1
)
這與@ msmucker0527在7分鐘前發佈的答案有什麼不同? –
@MartinSmith它不是。我在看到他的帖子之前正在寫這個查詢。我可以刪除,如果你喜歡。 – 2011-10-14 17:41:05
你的子查詢中有更好的選擇 – msmucker0527
是什麼你想排除?您是否過濾了ID或OrigID? – tsells
我是唯一一個不遵循這個嗎?你是否試圖過濾掉沒有改變的東西?在這種情況下,爲什麼4,4返回而不是6,6? –
@MikeChristensen - 從OP的解釋是不存在的,但它似乎是'OrigId'出現不止一次應該返回的行。 –