感谢您对此感兴趣。 我在一张桌子上有这样的东西
sifrez | sifKorisnikPK | Status
1 | 1 | 'P'
2 | 1 | 'P'
3 | 1 | 'U'
4 | 2 | 'P'
5 | 2 | 'P'
6 | 2 | 'U'
7 | 2 | 'U'
8 | 3 | 'U'
9 | 3 | 'U'
10 | 3 | 'U'
11 | 3 | 'U'
12 | 4 | 'P'
13 | 4 | 'P'
然后我创建了存储函数,它计算P和U之间的搜索比率,找到具有该id的用户并返回用户名
CREATE PROCEDURE sp_getBestUsernames
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
SELECT SifKorisnikPK, COUNT (Status) AS BrojLosih
INTO #LosaRez
FROM Rezervacija
WHERE Status = 'P'
GROUP BY SifKorisnikPK
order by count(*) desc
在这部分之后它给了我
sifKorisnikPK | BrojLosih
1 | 2
2 | 2
4 | 2
这只计算状态。 这个:
SELECT SifKorisnikPK, COUNT (Status) AS BrojDobrih
INTO #DobraRez
FROM Rezervacija
WHERE Status = 'U'
GROUP BY SifKorisnikPK
order by count(*) desc
我得到了
sifKorisnikPK | BrojDobrih
1 | 1
2 | 2
3 | 4
只计算你。这部分就像一个魅力...... 在这里,我尝试加入这两个临时表并计算比率,并以最佳比率返回SifKorisnik
SELECT Username FROM Korisnik
WHERE SifKorisnik = (SELECT TOP 1 a.SifKorisnikPK
FROM #DobraRez a
INNER JOIN #LosaRez b
ON a.SifKorisnikPK = b.SifKorisnikPK OR
a.SifKorisnikPK != b.SifKorisnikPK
WHERE a.BrojDobrih - b.BrojLosih > 0
ORDER BY a.BrojDobrih - b.BrojLosih )
END
在加入操作后,我希望得到一些这样的东西,我没有得到
sifKorisnikPK | BrojDobrih | BrojLosih 1 | 1 | 2 2 | 2 | 2 3 | 4 | 0 4 | 0 | 2
所以我可以计算比率BrojDobrih - BrojLosih并返回最佳比率SifKorisnikPK。在这种情况下,它将是SifKorisnik 3。 但是我的程序得到了SifKorisnik 2,这是第二好的。我认为问题在于它没有输入0的连接操作。所以我该如何解决这个问题呢?
答案 0 :(得分:1)
试试这个:
SELECT
A.sifKorisnikPK,
IsNull(BrojDobrih,0) BrojDobrih,
IsNull(BrojLosih,0) BrojLosih
FROM (select distinct sifKorisnikPK from Rezervacija) A
LEFT JOIN #LosaRez B
ON A.sifKorisnikPK = B.sifKorisnikPK
LEFT JOIN #DobraRez C
ON A.sifKorisnikPK = C.sifKorisnikPK
ORDER BY (IsNull(BrojDobrih,0) - IsNull(BrojLosih,0))