Sql 将两个内部联接查询合并到一个过程中

Sql 将两个内部联接查询合并到一个过程中,sql,sql-server,stored-procedures,inner-join,Sql,Sql Server,Stored Procedures,Inner Join,我正在尝试将上述两个过程合并为一个过程 请任何人帮助我,我正在获取us.MxitId列的重复值。 SELECT TOP 15 us.MxitId AS TransactionCreatedBy, COUNT(t.CreatedBy) Total FROM [User] us INNER JOIN [Transaction] t ON t.CreatedBy = us.UserId Where ChildGender = 'Male' GROUP BY us.MxitI

我正在尝试将上述两个过程合并为一个过程

请任何人帮助我,我正在获取
us.MxitId
列的重复值。

        SELECT TOP 15
      us.MxitId AS TransactionCreatedBy, COUNT(t.CreatedBy) Total
FROM [User] us
INNER JOIN [Transaction] t ON t.CreatedBy = us.UserId
Where ChildGender = 'Male'
GROUP BY us.MxitId, t.ChildGender 
ORDER BY 2 desc





SELECT TOP 15
      us.MxitId AS TransactionCreatedBy, COUNT(t.CreatedBy) Total
FROM [User] us
INNER JOIN [Transaction] t ON t.CreatedBy = us.UserId
Where ChildGender = 'Female'
GROUP BY us.MxitId, t.ChildGender 
ORDER BY 2 desc

此查询应可用于获取性别计数,而无需重复的MxitId

 SELECT TOP 15
      us.MxitId AS TransactionCreatedBy, 
    sum(case when ChildGender = 'Male' then 1 else 0 end) TotalMale
      ,sum(case when ChildGender = 'feMale' then 1 else 0 end) TotalFeMale
FROM [User] us
INNER JOIN [Transaction] t ON t.CreatedBy = us.UserId

GROUP BY us.MxitId, t.ChildGender 

您可以使用
行号()执行此操作。

写为:

      SELECT us.MxitId as TransactionCreatedBy, COUNT(t.CreatedBy) as Total,
             sum(case when t.ChildGender = 'Male' then 1 else 0 end) as TotalMales,
             sum(case when t.ChildGender = 'Female' then 1 else 0 end) as TotalFemales
      FROM [User] us INNER JOIN
           [Transaction] t
           ON t.CreatedBy = us.UserId
      GROUP BY us.MxitId, t.ChildGender 
      ORDER BY COUNT(t.CreatedBy) desc
      LIMIT 15;

您想如何组合它们?男孩的前15名用户可能与女孩的前15名用户完全不同。或者,它们可以是相同的列表,但顺序不同。向我们展示您希望输出的样子。您好,这两种情况下的用户都是相同的。如果用户没有记录任何女性数据,我想说0,反之亦然,MSG 102,15级,状态1,第3行“')附近的语法不正确。Msg 102,15级,状态1,第3行“TotalMale”附近语法不正确。Msg 102,第15级,状态1,第4行“TotalFeMale”附近的语法不正确。请将end放在括号内。数据仍在重复。我不知道表结构及其关系。在键入之前,它在该注释框中表示:请避免像+1这样的注释,谢谢..-)
SELECT TOP 15
      us.MxitId AS TransactionCreatedBy
, COUNT(t.CreatedBy) AS Total
, SUM(CASE WHEN ChildGender = 'Female' THEN 1 ELSE 0 END) AS FemaleCount
, SUM(CASE WHEN ChildGender = 'Male' THEN 1 ELSE 0 END) AS MaleCount
FROM [User] us
INNER JOIN [Transaction] t ON t.CreatedBy = us.UserId
GROUP BY us.MxitId
ORDER BY 2 desc
SELECT TransactionCreatedBy, ChildGender, Total
FROM (SELECT us.MxitId as TransactionCreatedBy, t.ChildGender, COUNT(t.CreatedBy) as Total,
             row_number() over (partition by t.ChildGender order by COUNT(t.CreatedBy) desc
                               ) as seqnum
      FROM [User] us INNER JOIN
           [Transaction] t
           ON t.CreatedBy = us.UserId
      GROUP BY us.MxitId, t.ChildGender 
     ) t
WHERE seqnum <= 15
ORDER BY Total desc;
      SELECT us.MxitId as TransactionCreatedBy, COUNT(t.CreatedBy) as Total,
             sum(case when t.ChildGender = 'Male' then 1 else 0 end) as TotalMales,
             sum(case when t.ChildGender = 'Female' then 1 else 0 end) as TotalFemales
      FROM [User] us INNER JOIN
           [Transaction] t
           ON t.CreatedBy = us.UserId
      GROUP BY us.MxitId, t.ChildGender 
      ORDER BY COUNT(t.CreatedBy) desc
      LIMIT 15;
select top 15 us.MxitId AS TransactionCreatedBy,
        count(case ChildGender when 'Male' then 1 else null end) as MaleCount,
        count(case ChildGender when 'Female' then 1 else null end) as FemaleCount
from [User] us
INNER JOIN [Transaction] t ON t.CreatedBy = us.UserId
GROUP BY us.MxitId