将三 (3) 个查询合并为一个
Combine three (3) queries into one
我想将这三个查询合并为一个查询:
SELECT County, Result1, COUNT(Result1) AS Result1Total
FROM MainData
WHERE (((Date) BETWEEN '01/01/2020' AND '01/30/2020'))
GROUP BY County, Result1
ORDER BY County;
SELECT County, Result2, COUNT(Result2) AS Result2Total
FROM MainData
WHERE (((Date) BETWEEN '01/01/2020' AND '01/30/2020'))
AND Result2 <> 'NULL'
GROUP BY County, Result2
ORDER BY County;
SELECT County, Result3, COUNT(Result3) AS Result3Total
FROM MainData
WHERE (((Date) BETWEEN '01/01/2020' AND '01/30/2020'))
AND Result3 <> 'NULL'
GROUP BY County, Result3
ORDER BY County;
我希望输出如下所示:
County Result Totals
-----------------------------------
Allegany Car Services 2
Richmond Car Services 3
Lynchberg House Services 5
Charlotte Car Services 12
Charlotte House Services 2
NorthHampton Car Serivces 6
NorthHampton House Services 8
结果1、2、3是下拉框,内容相同
如果列总计表示 resulttotal 的国家/地区明智结果之和,那么您的查询将是:
select Country, Result, sum(Result1Total) Totals
from (
SELECT County, Result1 Result, Count(Result1) AS Result1Total
FROM MainData
WHERE (((Date) Between '01/01/2020' And '01/30/2020'))
GROUP BY County, Result1
union all
SELECT County, Result2, Count(Result2) AS Result2Total
FROM MainData
WHERE (((Date) Between '01/01/2020' And '01/30/2020'))
AND Result2 <> 'NULL'
GROUP BY County, Result2
union all
SELECT County, Result3, Count(Result3) AS Result3Total
FROM MainData
WHERE (((Date) Between '01/01/2020' And '01/30/2020'))
AND Result3 <> 'NULL'
GROUP BY County, Result3
)
group by County, Result
ORDER BY County;
看起来 GROUPING SETS
在这里会派上用场:
SELECT
County,
ISNULL(ISNULL(Result1, Result2), Result3) AS Result,
COUNT(Result1) AS Result1Total
FROM MainData
WHERE (((Date) BETWEEN '01/01/2020' AND '01/30/2020'))
GROUP BY GROUPING SETS (
(County, Result1),
(County, Result2),
(County, Result3)
)
ORDER BY County;
如果 Result
列可以为空,那么您需要更复杂的表达式:
CASE WHEN GROUPING(Result1) = 0 THEN Result1
WHEN GROUPING(Result1) = 0 THEN Result2
ELSE Result3
END AS Result,
我想将这三个查询合并为一个查询:
SELECT County, Result1, COUNT(Result1) AS Result1Total
FROM MainData
WHERE (((Date) BETWEEN '01/01/2020' AND '01/30/2020'))
GROUP BY County, Result1
ORDER BY County;
SELECT County, Result2, COUNT(Result2) AS Result2Total
FROM MainData
WHERE (((Date) BETWEEN '01/01/2020' AND '01/30/2020'))
AND Result2 <> 'NULL'
GROUP BY County, Result2
ORDER BY County;
SELECT County, Result3, COUNT(Result3) AS Result3Total
FROM MainData
WHERE (((Date) BETWEEN '01/01/2020' AND '01/30/2020'))
AND Result3 <> 'NULL'
GROUP BY County, Result3
ORDER BY County;
我希望输出如下所示:
County Result Totals
-----------------------------------
Allegany Car Services 2
Richmond Car Services 3
Lynchberg House Services 5
Charlotte Car Services 12
Charlotte House Services 2
NorthHampton Car Serivces 6
NorthHampton House Services 8
结果1、2、3是下拉框,内容相同
如果列总计表示 resulttotal 的国家/地区明智结果之和,那么您的查询将是:
select Country, Result, sum(Result1Total) Totals
from (
SELECT County, Result1 Result, Count(Result1) AS Result1Total
FROM MainData
WHERE (((Date) Between '01/01/2020' And '01/30/2020'))
GROUP BY County, Result1
union all
SELECT County, Result2, Count(Result2) AS Result2Total
FROM MainData
WHERE (((Date) Between '01/01/2020' And '01/30/2020'))
AND Result2 <> 'NULL'
GROUP BY County, Result2
union all
SELECT County, Result3, Count(Result3) AS Result3Total
FROM MainData
WHERE (((Date) Between '01/01/2020' And '01/30/2020'))
AND Result3 <> 'NULL'
GROUP BY County, Result3
)
group by County, Result
ORDER BY County;
看起来 GROUPING SETS
在这里会派上用场:
SELECT
County,
ISNULL(ISNULL(Result1, Result2), Result3) AS Result,
COUNT(Result1) AS Result1Total
FROM MainData
WHERE (((Date) BETWEEN '01/01/2020' AND '01/30/2020'))
GROUP BY GROUPING SETS (
(County, Result1),
(County, Result2),
(County, Result3)
)
ORDER BY County;
如果 Result
列可以为空,那么您需要更复杂的表达式:
CASE WHEN GROUPING(Result1) = 0 THEN Result1
WHEN GROUPING(Result1) = 0 THEN Result2
ELSE Result3
END AS Result,