2016-01-21 61 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

感謝您的鏈接,我之前不知道此頁...我將檢查我的代碼,儘管我更喜歡在一個位置記錄中添加更多的列,而不是爲每個「汽車」重複它。 –

相關問題