如何在SQL Server中获得相同结果的两个查询结果?

时间:2015-04-28 16:42:37

标签: sql sql-server

我有两个查询给我结果。 我想要实现的是将第一个查询的结果放在顶部(作为第一个值),然后是第二个查询的结果,那么确切的结果将首先出现(Inlagg.Categori = 'testcategory') ,然后如果LIKE 'testcategory%'显示更多结果,则按照类别数量对它们进行排序。

如何将这些查询匹配在一起?

SELECT Inlagg.Categori, COUNT(Inlagg.Categori) AS 'amount' FROM Inlagg 
WHERE Inlagg.Date > '2015-04-26' AND Inlagg.Categori = 'testcatego'
GROUP BY Inlagg.Categori, Inlagg.Date

SELECT Inlagg.Categori, COUNT(Inlagg.Categori) AS 'amount' FROM Inlagg 
WHERE Inlagg.DatE > '2015-04-26' AND Inlagg.Kategori LIKE 'testcatego%'
GROUP BY Inlagg.Categori, Inlagg.Date
ORDER BY amount DESC

3 个答案:

答案 0 :(得分:2)

由于Parado的回答是正确的,你需要ORDER BY amount DESC 我建议你这个查询

SELECT *
FROM (
    SELECT Inlagg.Categori, COUNT(Inlagg.Categori) AS 'amount', '0' As Ord
    FROM Inlagg 
    WHERE Inlagg.Date > '2015-04-26' AND Inlagg.Categori = 'testcatego'
    GROUP BY Inlagg.Categori, Inlagg.Date
  UNION ALL
    SELECT Inlagg.Categori, COUNT(Inlagg.Categori) AS 'amount', '1' As ord
    FROM Inlagg 
    WHERE Inlagg.Datum > '2015-04-26' AND Inlagg.Kategori LIKE 'testcatego%'
    GROUP BY Inlagg.Categori, Inlagg.Date ) DT
ORDER BY ord, amount DESC

技巧: ord 会保留查询编号。

答案 1 :(得分:1)

尝试使用UNION ALL,如下所示

SELECT Inlagg.Categori, COUNT(Inlagg.Categori) AS 'amount' FROM Inlagg 
WHERE Inlagg.Date > '2015-04-26' AND Inlagg.Categori = 'testcatego'
GROUP BY Inlagg.Categori, Inlagg.Date
UNION ALL
SELECT Inlagg.Categori, COUNT(Inlagg.Categori) AS 'amount' FROM Inlagg 
WHERE Inlagg.Datum > '2015-04-26' AND Inlagg.Kategori LIKE 'testcatego%'
GROUP BY Inlagg.Categori, Inlagg.Date

答案 2 :(得分:0)

只需编写一个简单的查询并将testcat排在最前面:

SELECT Inlagg.Categori, COUNT(Inlagg.Categori) AS 'amount', '1' As ord
FROM Inlagg 
WHERE Inlagg.Datum > '2015-04-26' AND Inlagg.Categori LIKE 'testcatego%'
GROUP BY Inlagg.Categori, Inlagg.Date
ORDER BY CASE WHEN Inlagg.Categori = 'testcatego' THEN 1 ELSE 2 END,
         Inlagg.Date 

案例检查Categori是否相等并将其翻译为1.否则为2.