将两条SQL语句合并为一条
试图解决以下问题 我有两条SQL语句:将两条SQL语句合并为一条,sql,sql-server,Sql,Sql Server,试图解决以下问题 我有两条SQL语句: SELECT TagID, TagTitle, COUNT(*) AS TagCount FROM TagCategories JOIN SocialAndTags ON SocialAndTags.TagCategoriesID = TagID JOIN SocialManagementTracker ON SocialAndTags.SMTrackerID = SocialID WHERE InitialComment > '2020
SELECT TagID, TagTitle,
COUNT(*) AS TagCount
FROM TagCategories
JOIN SocialAndTags
ON SocialAndTags.TagCategoriesID = TagID
JOIN SocialManagementTracker
ON SocialAndTags.SMTrackerID = SocialID
WHERE InitialComment > '2020-01-01 00:00:00.000'
AND InitialComment < '2020-03-25 23:59:59.999'
GROUP BY TagTitle, TagID
SELECT TagID, TagTitle,
COUNT(*) AS TagCount
FROM TagCategories
JOIN SocialAndTags
ON SocialAndTags.TagCategoriesID_OtherA = TagID
JOIN SocialManagementTracker
ON SocialAndTags.SMTrackerID = SocialID
WHERE InitialComment > '2020-01-01 00:00:00.000'
AND InitialComment < '2020-03-25 23:59:59.999'
GROUP BY TagTitle, TagID
第二个查询给出了以下结果,这些结果也是正确的:
TagID | TagTitle | TagCount
1 | PASO | 14
2 | TUIT | 3
4 | IS | 3
20 | PSE | 13
22 | NONE | 55
23 | Digital | 2
24 | PCC | 3
我需要做的是让两个结果都出现在一个查询中,但我似乎不知道如何做到这一点
我的最后一个问题是:
SELECT TagTitle,
COUNT(*) AS TagCount
FROM TagCategories
LEFT OUTER JOIN SocialAndTags AS OtherA ON OtherA.TagCategoriesID = TagID
LEFT OUTER JOIN SocialAndTags AS OtherB ON OtherB.TagCategoriesID_OtherA = TagID
GROUP BY TagTitle
有些结果是正确的,但另一些则相差甚远。例如,,
PASO结果是364,应该是40
TUIT结果是3,应该是4
另一种选择是
数字是2,这是正确的
没有人是55岁,这也是正确的
很明显我做错了什么。非常感谢您的帮助。您可以试试这个
SELECT TagID, TagTitle,
COUNT(*) AS TagCount
FROM TagCategories
JOIN SocialAndTags ON (SocialAndTags.TagCategoriesID = TagID OR SocialAndTags.TagCategoriesID_OtherA = TagID)
JOIN SocialManagementTracker ON SocialAndTags.SMTrackerID = SocialID
WHERE InitialComment > '2020-01-01 00:00:00.000' AND InitialComment < '2020-03-25 23:59:59.999'
GROUP BY TagTitle, TagID
你可以试试这个
SELECT TagID, TagTitle,
COUNT(*) AS TagCount
FROM TagCategories
JOIN SocialAndTags ON (SocialAndTags.TagCategoriesID = TagID OR SocialAndTags.TagCategoriesID_OtherA = TagID)
JOIN SocialManagementTracker ON SocialAndTags.SMTrackerID = SocialID
WHERE InitialComment > '2020-01-01 00:00:00.000' AND InitialComment < '2020-03-25 23:59:59.999'
GROUP BY TagTitle, TagID
您可以使用UNION,在两个选择之间使用UNION,在两个选择之间使用UNION,您可以将查询合并在一起并获得计数的总和。例如:
SELECT TagID, TagTitle, SUM(TagCount)
FROM
(
SELECT TagID, TagTitle, COUNT(*) AS TagCount
FROM TagCategories
JOIN SocialAndTags ON SocialAndTags.TagCategoriesID = TagID
JOIN SocialManagementTracker ON SocialAndTags.SMTrackerID = SocialID
WHERE InitialComment > '2020-01-01 00:00:00.000' AND InitialComment < '2020-03-25 23:59:59.999'
GROUP BY TagTitle, TagID
UNION ALL
SELECT TagID, TagTitle, COUNT(*) AS TagCount
FROM TagCategories
JOIN SocialAndTags ON SocialAndTags.TagCategoriesID_OtherA = TagID
JOIN SocialManagementTracker ON SocialAndTags.SMTrackerID = SocialID
WHERE InitialComment > '2020-01-01 00:00:00.000' AND InitialComment < '2020-03-25 23:59:59.999'
GROUP BY TagTitle, TagID
) BothCounts
GROUP BY TagTitle, TagID
您可以将查询合并在一起并获得计数的总和。例如:
SELECT TagID, TagTitle, SUM(TagCount)
FROM
(
SELECT TagID, TagTitle, COUNT(*) AS TagCount
FROM TagCategories
JOIN SocialAndTags ON SocialAndTags.TagCategoriesID = TagID
JOIN SocialManagementTracker ON SocialAndTags.SMTrackerID = SocialID
WHERE InitialComment > '2020-01-01 00:00:00.000' AND InitialComment < '2020-03-25 23:59:59.999'
GROUP BY TagTitle, TagID
UNION ALL
SELECT TagID, TagTitle, COUNT(*) AS TagCount
FROM TagCategories
JOIN SocialAndTags ON SocialAndTags.TagCategoriesID_OtherA = TagID
JOIN SocialManagementTracker ON SocialAndTags.SMTrackerID = SocialID
WHERE InitialComment > '2020-01-01 00:00:00.000' AND InitialComment < '2020-03-25 23:59:59.999'
GROUP BY TagTitle, TagID
) BothCounts
GROUP BY TagTitle, TagID
你能试试这个吗
SELECT TagTitle,
COUNT(*) AS TagCount
FROM TagCategories
JOIN SocialAndTags AS OtherA
ON OtherA.TagCategoriesID = TagID
JOIN SocialAndTags AS OtherB
ON OtherB.TagCategoriesID_OtherA = TagID
WHERE OtherA.InitialComment > '2020-01-01 00:00:00.000'
AND OtherA.InitialComment < '2020-03-25 23:59:59.999'
AND OtherB.InitialComment > '2020-01-01 00:00:00.000'
AND OtherB.InitialComment < '2020-03-25 23:59:59.999'
GROUP BY TagTitle, TagID
你能试试这个吗
SELECT TagTitle,
COUNT(*) AS TagCount
FROM TagCategories
JOIN SocialAndTags AS OtherA
ON OtherA.TagCategoriesID = TagID
JOIN SocialAndTags AS OtherB
ON OtherB.TagCategoriesID_OtherA = TagID
WHERE OtherA.InitialComment > '2020-01-01 00:00:00.000'
AND OtherA.InitialComment < '2020-03-25 23:59:59.999'
AND OtherB.InitialComment > '2020-01-01 00:00:00.000'
AND OtherB.InitialComment < '2020-03-25 23:59:59.999'
GROUP BY TagTitle, TagID
你只是在寻找两个结果的总和吗?我认为一对多的关系正在打乱你的关系。只需要加上总数。你只是在寻找两个结果的总数吗?我认为一对多的关系正在打乱你的关系。只需要添加总数。这是我们最初的结果,但他们希望将所有结果添加在一起。好的,嵌套选择是我们最初的结果,但他们希望将所有结果添加在一起。好的,嵌套选择是什么?两列是否具有相同的标记?我看到了由或引起的性能问题。OR可能导致查询优化器选择表扫描,而不是串联单独的索引查找。我建议改为使用联合进行单独的查询。两个列是否具有相同的标记?我已经看到了由或引起的性能问题。OR可能导致查询优化器选择表扫描,而不是串联单独的索引查找。我建议用一个联合体来进行单独的查询。