Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将两条SQL语句合并为一条_Sql_Sql Server - Fatal编程技术网

将两条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

试图解决以下问题

我有两条SQL语句:

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可能导致查询优化器选择表扫描,而不是串联单独的索引查找。我建议用一个联合体来进行单独的查询。