Sql 需要事件类型的总计
我有一家公司举办了一定数量的活动,与“社交活动”相当。我需要基于公司的这些事件的总数,但在尝试对EVENT_TYPE列求和、转换或强制转换时抛出了一个错误。我已经盯着这个问题看了太久了,我认为一套新的眼睛和大脑可以帮助我找到显而易见的问题。代码如下:Sql 需要事件类型的总计,sql,sql-server,Sql,Sql Server,我有一家公司举办了一定数量的活动,与“社交活动”相当。我需要基于公司的这些事件的总数,但在尝试对EVENT_TYPE列求和、转换或强制转换时抛出了一个错误。我已经盯着这个问题看了太久了,我认为一套新的眼睛和大脑可以帮助我找到显而易见的问题。代码如下: SELECT Demo_Chapter_Events.CE_EVENT_TYPE, Demo_Chapter_Events.CE_EVENT_DATE, Name.COMPANY,
SELECT Demo_Chapter_Events.CE_EVENT_TYPE,
Demo_Chapter_Events.CE_EVENT_DATE,
Name.COMPANY,
COUNT(CE_EVENT_TYPE) AS Expr1
FROM Demo_Chapter_Events
INNER JOIN Name
ON Demo_Chapter_Events.ID = Name.ID
WHERE (Demo_Chapter_Events.CE_EVENT_TYPE = 'social')
AND (Demo_Chapter_Events.CE_EVENT_DATE
BETWEEN CONVERT(DATETIME, '2015-08-01 00:00:00', 102)
AND CONVERT(DATETIME, '2015-12-31 00:00:00', 102))
GROUP BY Demo_Chapter_Events.CE_EVENT_TYPE,
Demo_Chapter_Events.CE_EVENT_DATE,
Name.COMPANY
ORDER BY Name.COMPANY
样本输出-
CE_EVENT_TYPE CE_EVENT_DATE COMPANY Expr1
---------------------------------------- ----------------------- -------------------------------------------------------------------------------- -----------
SOCIAL 2015-09-17 00:00:00.000 Alpha Alpha Chapter 6
SOCIAL 2015-10-08 00:00:00.000 Alpha Alpha Chapter 6
SOCIAL 2015-10-29 00:00:00.000 Alpha Alpha Chapter 6
SOCIAL 2015-11-19 00:00:00.000 Alpha Alpha Chapter 6
SOCIAL 2015-12-03 00:00:00.000 Alpha Alpha Chapter 6
SOCIAL 2015-11-05 00:00:00.000 Alpha Alpha Chapter 6
SOCIAL 2015-09-24 00:00:00.000 Alpha Beta Chapter 3
SOCIAL 2015-11-13 00:00:00.000 Alpha Beta Chapter 3
SOCIAL 2015-12-05 00:00:00.000 Alpha Beta Chapter 3
SOCIAL 2015-11-14 00:00:00.000 Alpha Chapter 1
SOCIAL 2015-09-19 00:00:00.000 Alpha Chi Chapter 16
SOCIAL 2015-10-16 00:00:00.000 Alpha Chi Chapter 16
SOCIAL 2015-10-21 00:00:00.000 Alpha Chi Chapter 16
SOCIAL 2015-10-22 00:00:00.000 Alpha Chi Chapter 16
SOCIAL 2015-10-24 00:00:00.000 Alpha Chi Chapter 16
SOCIAL 2015-10-30 00:00:00.000 Alpha Chi Chapter 16
SOCIAL 2015-11-06 00:00:00.000 Alpha Chi Chapter 16
SOCIAL 2015-11-12 00:00:00.000 Alpha Chi Chapter 16
SOCIAL 2015-09-18 00:00:00.000 Alpha Chi Chapter 16
根据你的问题目前的措辞,以下是我将如何解决它:
SELECT d1.CE_EVENT_TYPE,
d1.CE_EVENT_DATE,
n1.COMPANY,
(SELECT COUNT(*)
FROM Demo_Chapter_Events d2
INNER JOIN Name n2
ON d2.ID = n2.ID
WHERE n2.Company=n1.Company
AND d2.CE_EVENT_TYPE = 'social'
AND (d2.CE_EVENT_DATE
BETWEEN CONVERT(DATETIME, '2015-08-01 00:00:00', 102)
AND CONVERT(DATETIME, '2015-12-31 00:00:00', 102))
) AS Expr1
FROM Demo_Chapter_Events d1
INNER JOIN Name n1
ON d1.ID = n1.ID
WHERE (d1.CE_EVENT_TYPE = 'social')
AND (d1.CE_EVENT_DATE
BETWEEN CONVERT(DATETIME, '2015-08-01 00:00:00', 102)
AND CONVERT(DATETIME, '2015-12-31 00:00:00', 102))
GROUP BY d1.CE_EVENT_TYPE,
d1.CE_EVENT_DATE,
n1.COMPANY
ORDER BY Name.COMPANY
编辑:
我已经编辑了上面的代码,不需要按d1.ID分组,并根据名称表中的“公司”列更准确地获取计数。根据您当前的问题措辞,我将如何解决此问题:
SELECT d1.CE_EVENT_TYPE,
d1.CE_EVENT_DATE,
n1.COMPANY,
(SELECT COUNT(*)
FROM Demo_Chapter_Events d2
INNER JOIN Name n2
ON d2.ID = n2.ID
WHERE n2.Company=n1.Company
AND d2.CE_EVENT_TYPE = 'social'
AND (d2.CE_EVENT_DATE
BETWEEN CONVERT(DATETIME, '2015-08-01 00:00:00', 102)
AND CONVERT(DATETIME, '2015-12-31 00:00:00', 102))
) AS Expr1
FROM Demo_Chapter_Events d1
INNER JOIN Name n1
ON d1.ID = n1.ID
WHERE (d1.CE_EVENT_TYPE = 'social')
AND (d1.CE_EVENT_DATE
BETWEEN CONVERT(DATETIME, '2015-08-01 00:00:00', 102)
AND CONVERT(DATETIME, '2015-12-31 00:00:00', 102))
GROUP BY d1.CE_EVENT_TYPE,
d1.CE_EVENT_DATE,
n1.COMPANY
ORDER BY Name.COMPANY
编辑:
我已经编辑了上面的代码,不需要group by d1.ID,并根据名称表中的Company列更正确地获取计数。这两个代码都被标记为group by d1.ID。我道歉。谢谢你的提醒。实际回答你的问题是SQL。问题是我没有在你的查询中看到
SUM
或CONVERT
。首先,我们需要导致错误的查询和确切的错误消息。然后,我们需要知道您的db模式,以了解字段的类型。最后向我们展示一些示例数据。事件类型列是CE\U事件类型列吗?它包含“社交”之类的词?你想要这些词的总和吗?还是你想说出这个词?什么数据类型?这听起来有点混乱:-)CE_EVENT_TYPE是包含单词“social”的列。我需要一个归因于Name.COMPANY列的CE_EVENT_TYPE='social'的总出现次数,以便输出是一个表示每个Name.COMPANY的总整数金额的列。CAST、SUM和CONVERT pitch无法将varchar“social”转换为INT。当前结果列表重复出现名称。公司、CE_事件类型和表示CE_事件类型的单个数字如下:[link]这两种类型都已标记。我道歉。谢谢你的提醒。实际回答你的问题是SQL。问题是我没有在你的查询中看到SUM
或CONVERT
。首先,我们需要导致错误的查询和确切的错误消息。然后,我们需要知道您的db模式,以了解字段的类型。最后向我们展示一些示例数据。事件类型列是CE\U事件类型列吗?它包含“社交”之类的词?你想要这些词的总和吗?还是你想说出这个词?什么数据类型?这听起来有点混乱:-)CE_EVENT_TYPE是包含单词“social”的列。我需要一个归因于Name.COMPANY列的CE_EVENT_TYPE='social'的总出现次数,以便输出是一个表示每个Name.COMPANY的总整数金额的列。CAST、SUM和CONVERT pitch无法将varchar“social”转换为INT。当前结果列表重复出现的名称。公司、CE_事件类型和表示CE_事件类型的单个数字如下:[link]看起来与我要查找的完全相同。我有点纠结于子查询的概念。我是这方面的新手,所以我感谢大家的耐心。不幸的是,我收到此错误消息-列“Demo\u Chapter\u Events.ID”在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中。您在问题中的查询中未选择ID。如果需要将其添加到选择列表中,还需要将其添加到GROUP BY子句中。抱歉,我已将“Demo\u Chapter\u Events.ID”添加到GROUP\u BY中,它现在似乎正在返回。谢谢。最后一件事是,由于这段代码工作得很好,我如何让它只显示名称和总数,而不显示重复的元素?请看屏幕截图[链接],我想这是应用DISTINCT的好时机,不是吗。谢谢大家!那和我要找的一模一样。我有点纠结于子查询的概念。我是这方面的新手,所以我感谢大家的耐心。不幸的是,我收到此错误消息-列“Demo\u Chapter\u Events.ID”在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中。您在问题中的查询中未选择ID。如果需要将其添加到选择列表中,还需要将其添加到GROUP BY子句中。抱歉,我已将“Demo\u Chapter\u Events.ID”添加到GROUP\u BY中,它现在似乎正在返回。谢谢。最后一件事是,由于这段代码工作得很好,我如何让它只显示名称和总数,而不显示重复的元素?请看屏幕截图[链接],我想这是应用DISTINCT的好时机,不是吗。谢谢大家!