SQL子查询与COUNT

问题描述 投票:0回答:1

我有我们的包含通讯表;创建的用户,创建日期和子码。我所要的输出在SSRS 4列,显示出较上月通信;

Comms logged    Dealt With     % Dealt With
Created         User              1    
Created         User              2

到目前为止,我有;

SELECT
  [EM-COMMUNICATION].[CRT-USER]
  ,COUNT([EM-COMMUNICATION].[CRT-USER]) AS LOGGED
  ,(SELECT COUNT([EM-COMMUNICATION].[CRT-USER]) FROM [EM-COMMUNICATION] WHERE [EM-COMMUNICATION].[SUB-CODE] = N'DEALTWITH' AND DateDiff(MONTH,[EM-COMMUNICATION].[CRT-DATE],GetDate()) = 1) AS Dealt
FROM
  [EM-COMMUNICATION]
WHERE
  DateDiff(MONTH,[EM-COMMUNICATION].[CRT-DATE],GetDate()) = 1
GROUP BY
  [EM-COMMUNICATION].[CRT-USER]

我遇到的问题是,子查询返回COMM的计数为所有用户,而不是匹配主要查询的分组,即每行有“已发牌与”相同的数

sql-server
1个回答
0
投票

您需要使用您的AND [EM-COMMUNICATION].[CRT-USER] = T.[CRT-USER]主查询你的相关子查询

SELECT
  [EM-COMMUNICATION].[CRT-USER]
  ,COUNT([EM-COMMUNICATION].[CRT-USER]) AS LOGGED
  ,(SELECT COUNT([EM-COMMUNICATION].[CRT-USER]) FROM [EM-COMMUNICATION] as T WHERE T.[SUB-CODE] = N'DEALTWITH' AND DateDiff(MONTH,T.[CRT-DATE],GetDate()) = 1 AND [EM-COMMUNICATION].[CRT-USER] =  T.[CRT-USER]) AS Dealt
FROM
  [EM-COMMUNICATION]
WHERE
  DateDiff(MONTH,[EM-COMMUNICATION].[CRT-DATE],GetDate()) = 1
GROUP BY
  [EM-COMMUNICATION].[CRT-USER]
© www.soinside.com 2019 - 2024. All rights reserved.