2012-06-28 120 views
4

我有没有关系的数据。只需要计算3个表格中的各列,并将它们作为视图显示在页面上。SQL在一个查询中有多个选择计数语句

这是到目前为止的代码,但不工作:

SELECT COUNT(cars) AS A, 
     (SELECT COUNT(boats) FROM tableBoats) AS B, 
     (SELECT COUNT(trees) FROM tableTrees) AS C, 
FROM tableCars 
+0

什么是什么数据库您使用的是你和错误? –

回答

10
SELECT A, B, C 
FROM (SELECT COUNT(cars) as A FROM tableCars) a 
CROSS JOIN (SELECT COUNT(boats) as B FROM tableBoats) b 
CROSS JOIN (SELECT COUNT(trees) as C FROM tableTrees) c 

应该这样做。

+0

这工作!谢谢。我试图接受答案,但它告诉我等5分钟。生病后就做吧! – user999690

+1

@ user999690您不必快速接受答案。当一个问题还没有得到答案时,它动机人们回答它。那么你可以有多个解决方案来解决你的问题:-) –

0
SELECT * 
FROM 
(
    SELECT 'Nb cars' as description, COUNT(cars) AS count_item FROM tableCars 
    UNION ALL 
    SELECT 'Nb boats' as description, COUNT(boats) AS count_item FROM tableBoats 
    UNION ALL 
    SELECT 'Nb tress' as description, COUNT(trees) AS count_item FROM tableTrees 
) temp 
12

假设你有喜欢这里的表(有一个名为xxxtableXxx表),查询由具有逗号有语法错误AS C,后,没有那个逗号,它工作正常(至少使用SQLite,因为MSSQL是不是在sqlfiddle对我来说)工作:

http://sqlfiddle.com/#!5/5fa6c/3

SELECT COUNT(cars) AS A, 
     (SELECT COUNT(boats) FROM tableBoats) AS B, 
     (SELECT COUNT(trees) FROM tableTrees) AS C 
FROM tableCars 

顺便说一句,你可以简化您的查询

SELECT (SELECT COUNT(cars) FROM tableCars) AS A, 
     (SELECT COUNT(boats) FROM tableBoats) AS B, 
     (SELECT COUNT(trees) FROM tableTrees) AS C 

其他的答案也完美:)

+0

由于我已经减少了2页的加载时间超过200%,另一个减少了30% – user3455363

1

这个怎么样?

SELECT 
    (SELECT COUNT(*) FROM tableCars) car_count, 
    (SELECT COUNT(*) FROM tableBoats) boat_count, 
    (SELECT COUNT(*) FROM tableTrees) tree_count 
1

继吕克M的回应,它提供了一个单一的列表,与具有单独值的列。 你可以想象这是多么有用可能是...

SELECT C.Accountnum as AccountNum, C.Address as Address, 'C' as Source 
From CustTable C 
Where C.AccountNum like '000%' 
Union All 
Select V.Accountnum as AccountNum, V.Name as Address, 'V' as Source 
from VendTable V 
Where V.AccountNum like 'A%'