按一列的值连接两个表并计算

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))