繁体   English   中英

如何在分组依据中添加额外的列

[英]How to add an extra column to the Group By

我正在使用TSQL。

SELECT  
     s.Login_Name,
     COUNT( DISTINCT (isnull(s.s1CIDNumber,'')+isnull(s.s1AVATARNumber,''))) AS 'Number of Surveys For the Week Ending on 60/09/2015'    
  FROM [dbSuppHousing].[dbo].[tblSurvey]s
  inner join tblUsers u  on 
   s.Login_Name=u.UserName
  where s.Survey_DT >='06/01/2015' AND s.Survey_DT <='2015-06-09 23:59:59'       
  group by s.Login_Name

当前,它显示如下数据:

LoginName   Number of Surveys
    MrA   8
    Mrb   4
    mrc   4
    mrd   6

如何将user_ id显示为另一列? User_id位于tblUser中,并且tblsurvey和tblUser在Login_Name上都具有1-1关系

因此结果应如下所示:

 LoginName   Number of Surveys   User_ID
    MrA           8              33
    Mrb           4              55  
    mrc           4              11 
    mrd           6              07

我试图加入这两个表并添加User_id,但是每次我被众所周知的错误“ User_id应该属于group by的一部分”所阻止时,

不,我不希望User_id成为group by的一部分,我只希望它将其添加到第三列。

如果user_ID是唯一的,则可以将其添加到GROUP BY,而不会增加记录集。 您还可以将初始查询插入到临时表中并进行更新(开销更大)以获取user_id,如下所示:

IF OBJECT_ID('tempdb..#Users', 'U') IS NOT NULL
    DROP TABLE #Users;


CREATE TABLE #Users
            (login_Name  NVARCHAR(256),
             NumSurveys INT,
             User_ID INT)


INSERT INTO #Users(login_Name, NumSurveys)
SELECT  
     s.Login_Name,
     COUNT( DISTINCT (isnull(s.s1CIDNumber,'')+isnull(s.s1AVATARNumber,''))) AS 'Number of Surveys For the Week Ending on 60/09/2015'    
  FROM [dbSuppHousing].[dbo].[tblSurvey]s
  inner join tblUsers u  on 
   s.Login_Name=u.UserName
  where s.Survey_DT >='06/01/2015' AND s.Survey_DT <='2015-06-09 23:59:59'       
  group by s.Login_Name



UPDATE  #Users
SET  User_ID = User_ID
FROM #Users u 
INNER JOIN tblUsers u2
ON u.login_Name = u2.login_Name

将您的GroupBY查询放入子选择中,并给标签“ a”。 然后将整个子选择加入到tblUser中,并给它一个标签“ b”。 然后在LoginID上加入“ a”和“ b”。 然后选择a.user_id,然后选择其余的“ b”

SELECT a.user_id,b.*
FROM 
(SELECT  
 s.Login_Name,
 COUNT( DISTINCT (isnull(s.s1CIDNumber,'')+isnull(s.s1AVATARNumber,''))) AS 'Number of Surveys For the Week Ending on 60/09/2015'    
  FROM [dbSuppHousing].[dbo].[tblSurvey]s
  inner join tblUsers u  on 
   s.Login_Name=u.UserName
  where s.Survey_DT >='06/01/2015' AND s.Survey_DT <='2015-06-09 23:59:59'       
  group by s.Login_Name) a inner join tblUsers b on a.Login_Name = b.Login_Name

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM