按一列的值连接两个表并计算
joining two tables by value of one column and calculating
感谢您对问题感兴趣。
我有一个 table 像这样的东西
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 和 return 用户名
的用户
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
这只计算 p 的状态。
还有这个:
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
只计算 U。这部分就像一个魅力...
在这里,我尝试加入这两个温度 tables 并计算比率和 return 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 |布罗伊多布里赫 |布洛西
1 | 1 | 2个
2 | 2 | 2个
3 | 4 | 0
4 | 0 | 2
所以我可以计算 BrojDobrih - BrojLosih 和 return SifKorisnikPK 的比率,这是最佳比率。在这种情况下,它将是 SifKorisnik 3。
但我的程序获得了第二好的 SifKorisnik 2。我认为问题出在不输入 0 的加入操作中。那么我该如何解决呢?
试试这个:
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))
感谢您对问题感兴趣。 我有一个 table 像这样的东西
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 和 return 用户名
的用户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
这只计算 p 的状态。 还有这个:
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
只计算 U。这部分就像一个魅力... 在这里,我尝试加入这两个温度 tables 并计算比率和 return 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 |布罗伊多布里赫 |布洛西 1 | 1 | 2个 2 | 2 | 2个 3 | 4 | 0 4 | 0 | 2
所以我可以计算 BrojDobrih - BrojLosih 和 return SifKorisnikPK 的比率,这是最佳比率。在这种情况下,它将是 SifKorisnik 3。 但我的程序获得了第二好的 SifKorisnik 2。我认为问题出在不输入 0 的加入操作中。那么我该如何解决呢?
试试这个:
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))