我正在开发销售报告,并尝试选择销售人员在一周内完成的活动计数,并且想要显示所有活动,无论他是否在表中完成或否,我使用的是左侧联接还是完全联接但没有显示。以下是表格的说明
Table 1: Activity Types - ACT_TYPE_ID ,ACT_TYPE_Desc
Table 2: Activity Details - ACT_TYPE_ID, ACT_TYPE_Text
我想显示如下:
类型计数
Sales Call - 3
Phone Call 0
Meeting Outside 9
下面是我的select语句,但未返回必需的内容,仅显示已创建的活动:
Select ACT_TYPE_Desc as [Activity Type] , Count(CR031_DIARY_TEXT) as Count
From ACT_TYPES AT Join ACT_Details AD
On AT.DRY_TRC_TYPE = Ad.ACT_TYPE
Group By ACT_TYPE_Desc
该解决方案几乎可以使用,但是它不会显示未分配的活动。是否有任何方法可以包含这些活动,我已经使用了Left和full join
如果您需要更多信息,请告诉我。
感谢
答案 0 :(得分:0)
您可以在下面尝试
Select ACT_TYPE_Desc as [Activity Type] , Count(CR031_DIARY_TEXT) as Count
From ACT_TYPES AT left Join ACT_Details AD
On AT.DRY_TRC_TYPE = Ad.ACT_TYPE
Group By ACT_TYPE_Desc
答案 1 :(得分:0)
使用左联接,并计算ACT_Details
表中的一列,以将所有记录包括在计数中,甚至包括NULL
:
SELECT
AT.ACT_TYPE_Desc AS [Activity Type],
COUNT(AD.ACT_TYPE) AS cnt
FROM ACT_TYPES AT
LEFT JOIN ACT_Details AD
ON AT.DRY_TRC_TYPE = AD.ACT_TYPE AND <restriction on time>
GROUP BY
AT.ACT_TYPE_Desc;
注意<restriction on time>
:
如果您需要在ACT_Details
表上添加任何限制,则将它们放置在联接的ON
子句中。 ACT_TYPES
表中的限制可能在WHERE
子句中。
答案 2 :(得分:0)
尝试这样:
Select COALESCE(ACT_TYPE_Desc, 'Empty') as [Activity Type] ,
COALESCE(Count(CR031_DIARY_TEXT), 0) as Count
From ACT_TYPES AT LEFT OUTER Join
ACT_Details AD
On AT.DRY_TRC_TYPE = Ad.ACT_TYPE
Group By CR774_DRY_TRC_DESC
当该值为空时,Coalcece函数将返回0。注意:返回值(在这种情况下为“空”)取决于返回值。可以是字符串或日期,也可以是任何其他类型,具体取决于列的类型。
答案 3 :(得分:0)
我认为最好的方法是使用左外部联接,在左外部联接中,如果左行没有与右表对应的行,则左表将在右联接,而与右表的列为null,这与内部联接(您的join)不同 这是左联接https://www.w3schools.com/sql/sql_join_left.asp的文档 这是内部联接https://www.w3schools.com/sql/sql_join_inner.asp
的文档Select ACT_TYPE_Desc as [Activity Type] , Count(CR031_DIARY_TEXT) as Count
From ACT_TYPES AT LEFT Join ACT_Details AD
On AT.DRY_TRC_TYPE = Ad.ACT_TYPE
Group By ACT_TYPE_Desc