2015-11-25 59 views
0

我有以下查詢,我相信是不正確的。我有一張名爲KantechImages的表,它包含大約8500行。我想顯示Name,ESRno,Dept & JobTitle,其中有一個以上的某人出現的名字。我的查詢是:SQL - 計數> 1時顯示

SELECT  Name, COUNT(*) AS count, ESRno, JobTitle, Dept 
FROM  dbo.KantechImages 
GROUP BY Name, ESRno, JobTitle, Dept 
HAVING  (COUNT(*) > 1) 

但它只顯示268行,我知道這是不正確的。如果我將它編輯爲SELECT Name & Count,它將帶回500多行。

+0

'SELECT COUNT(*)AS計數,ESRno,JOBTITLE,系 FROM dbo.KantechImages GROUP BY ESRno,JOBTITLE,系 HAVING COUNT(*)> 1' – lad2025

+0

你確定嗎?發佈兩個查詢。 – Paparazzi

+0

謝謝你。 – SamFarr

回答

2

你可以做你想要的窗函數是什麼:

select name, cnt, ESRno, JobTitle, Dept 
from (select ki.*, count(*) over (partition by name) as cnt 
     from dbo.KantechImages ki 
    ) ki 
where cnt > 1; 

因爲你想要的原始行,外select一個group by是不恰當的。

+0

你說沒有appropiated,但都沒有查詢返回相同的結果? –

+0

我認爲你的外部查詢應該包含'group by'或者'distinct',否則它可能會產生重複的行。 –

+0

@SQLPolice。 。 。目的似乎是獲取名稱被複制的所有原始行。這就是這個查詢所做的。 –

0

您的查詢看起來沒問題。我認爲問題出在您的數據上。可能你認爲是相同的東西,它們不像名稱中的多餘空格。或者也許是名稱和ESRno之間的不匹配。

嘗試像

這應返回相同+500名字,但爲了通過名稱,如果一些有額外的空間,出現重複你可以比較。

SELECT Name, count(Name) 
    FROM dbo.KantechImages 
    GROUP BY Name 
    ORDER BY Name 
    HAVING count(Name) > 1 

這應該返回相同的+500,因爲我認爲每個名稱有一個單一的ESRno,除非2個脂肪酶具有相同的名稱。在這種情況下,你應該在結果中得到更多的行。

SELECT Name, ESRno, Count(ESRno) 
    FROM dbo.KantechImages 
    GROUP BY Name, ESRno 
    ORDER BY Name, ESRno 
    HAVING count(ESRno) > 1 
+0

感謝您的支持。 – SamFarr