2011-10-14 12 views
-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 
+0

是什麼你想排除?您是否過濾了ID或OrigID? – tsells

+0

我是唯一一個不遵循這個嗎?你是否試圖過濾掉沒有改變的東西?在這種情況下,爲什麼4,4返回而不是6,6? –

+1

@MikeChristensen - 從OP的解釋是不存在的,但它似乎是'OrigId'出現不止一次應該返回的行。 –

回答

3

您可以使用HAVING語句

SELECT * 
FROM dbo.Table 
WHERE OrigID IN 
(
SELECT OrigID 
FROM dbo.Table 
GROUP BY OrigID 
HAVING COUNT(*) > 1 
) 
4

要帶回其中相應的OrigId多次出現在表中的所有行,你可以使用

;WITH CTE AS 
(
SELECT *, 
     COUNT(*) OVER (PARTITION BY OrigId) AS C 
FROM YourTable 
) 
SELECT ID, 
     OrigId 
FROM CTE 
WHERE C >1 
+0

+1正如我自己寫的那樣:()格式):-) – xanatos

0
select * 
from selecttest 
where origid in 
(
    select origid 
    from selecttest 
    group by origid 
    having COUNT(*) > 1 
) 
+1

這與@ msmucker0527在7分鐘前發佈的答案有什麼不同? –

+0

@MartinSmith它不是。我在看到他的帖子之前正在寫這個查詢。我可以刪除,如果你喜歡。 – 2011-10-14 17:41:05

+0

你的子查詢中有更好的選擇 – msmucker0527