将两个SQL选择合并为一个结果

时间:2015-10-05 16:58:57

标签: sql sql-server report

在同一个表上有两个SQL选择。 1st select显示所需的用户数据。第二个选择查找“首字母”的使用次数。该值往往会多次使用,但不应该

我不希望在查询1中拥有更少的行,而是添加“所有初始计数”

- 显示所有所需数据的第一个查询

SELECT   
    UserID, Username, Initials
FROM     
    dbo.Users

此查询可以计算Initaials

SELECT
    Initials, count(*) as InitialCount
FROM     
    dbo.Users
GROUP BY 
    Initials

输出:

UserID  |  Username   |  Initals | Initialcount 
----------------------------------------------      
   1    |  Peter Pan  |     PP   |  2  
   2    |  Paul Pax   |     PP   |  2
   3    |  John Doe   |     JD   |  1

3 个答案:

答案 0 :(得分:5)

您可以COUNT()使用OVER()来获取每个组的计数(由PARTITION BY定义),而不是GROUP BY

SELECT   
    UserID
  , Username
  , Initials
  , COUNT(*) OVER(PARTITION BY Initials) AS InitialCount
FROM     
    dbo.Users

通常称为分析或窗口函数,OVER()可用于聚合函数,如MIN()MAX()SUM()等。

答案 1 :(得分:0)

SELECT UserID, Username, Inititials, 
(SELECT COUNT(*) FROM dbo.Users U2 WHERE U2.Inititals = U1.Initials) InitialCount
FROM dbo.Users U1

答案 2 :(得分:0)

因此,请尝试使用关键字distinct,具体取决于您可能需要进行自我加入的数据。我只是学习SQL所以我可能不正确。

SELECT   DISTINCT UserID, Username, Initials, count(Initials) as InitialCount
FROM     dbo.Users
GROUOP BY UserID