2016-01-21 62 views
3

我有4个表:如何将另一个表中的所有记录用作计数列?

位置:

location_id name 
------------------------ 
1    France 

设备:

device_id  location_id model_id 
------------------------------------- 
1    1    1 
2    1    2 
3    1    3 

模型:

model_id  family_id  name 
------------------------------------- 
1    1    C-max 
2    1    S-max 
3    2    Vectra 

和家族:

family_id name 
--------------------- 
1   Ford 
2   Opel 

我需要现在构建一个复杂的SQL查询。因此,我想收到此:

location_id name  Ford  Opel 
------------------------------------------ 
1    France 2   1 

是否有可能在SQL中执行它?我看到有存在问题:(?count功能)

  • 关于在查询中使用其他表中的记录栏目

  • 关于嵌套表

  • 关于计数的元素

任何意见/参考资料对我都有帮助。我不等待最终的代码。

+0

我假设你thinkling一个查询,“选择”的基础上表中找到的数据的其他列? – Takarii

+0

是的,我需要添加可变数量的列,具体取决于家庭表的记录数 –

+0

您可以使用Java并执行应用程序来解决此问题。 – Deckard27

回答

0

谢谢大家的有用提示。

我使用静态方法和@Matt发布的代码解决了我的问题。因为别人可能会寻求的解决方案,我在这里贴上我的工作查询的PostgreSQL:

SELECT DISTINCT t.location_id, t.name, SUM(t.ford) AS ford, SUM(t.opel) as opel 
FROM(
SELECT l.location_id, l.name, 
(SELECT COUNT(m.family_id) WHERE m.family_id = '1') AS ford, 
(SELECT COUNT(m.family_id) WHERE m.family_id = '2') AS opel 
FROM location l 
INNER JOIN device d ON l.location_id = d.location_id 
INNER JOIN model m ON d.model_id = m.model_id 
INNER JOIN family f ON m.family_id = f.family_id 
GROUP BY l.location_id, l.name, m.family_id 
) t 
GROUP BY t.location_id; 
1

在SQL查询中列已修复。根据数据,您可以获得或多或少的,而不是列。但这并不重要,因为SQL即将让数据不显示。后者是GUI层的一项任务。

因此,获取所需的数据,这是主要针对每个位置和家庭的模型数量。

select l.location_id, l.name as location_name, f.name as family_name, count(*) as models 
from location l 
join device d on d.location_id = l.location_id 
join model m on m.model_id = d.model_id 
join family f on f.family_id = m.family_id 
group by l.location_id, l.name, f.name 
order by l.location_id, l.name, f.name; 

这是你从数据库中所需要的。如何显示数据是您的程序的一项任务,在您的案例中是一个Delphi应用程序。因此,使用Delphi通过上面的查询来读取数据并在一个简单的循环中填充你的网格。

+0

谢谢你的代码,但它没有找到我的任何记录... –

+0

然后你的数据是不完整的。下面是一个SQL小提琴,显示查询的工作原理:http://www.sqlfiddle.com/#!9/dc28e/1 –

+0

感谢您的链接,我之前不知道此页...我将检查我的代码,尽管我更喜欢在一个位置记录中添加更多的列,而不是为每个“汽车”重复它。 –

相关问题