【问题标题】:Merge two SQL selects into one result将两个 SQL 选择合并为一个结果
【发布时间】:2015-10-06 01:07:26
【问题描述】:

在同一张表上有两个 SQL 选择。第一次选择 显示所需的用户数据。第二次选择查找使用了多少次“首字母”。该值往往会被多次使用,尽管它不应该

我不想像查询 1 那样减少行数,而是添加“全部初始计数”

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

SELECT   
    UserID, Username, Initials
FROM     
    dbo.Users

这个查询可以计算首字母

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

【问题讨论】:

  • 您使用的是什么版本的 SQL Server?

标签: sql sql-server report


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:
    SELECT UserID, Username, Inititials, 
    (SELECT COUNT(*) FROM dbo.Users U2 WHERE U2.Inititals = U1.Initials) InitialCount
    FROM dbo.Users U1
    

    【讨论】:

      【解决方案3】:

      因此,请尝试根据您可能需要进行自联接的数据来使用关键字 distinct。我只是学习 SQL,所以我可能不正确。

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

      【讨论】:

      • 我认为您不能在一个语句中执行 DISTINCT 和 GROUP BY。 GROUP BY 本质上为您执行不同的操作。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-25
      相关资源
      最近更新 更多