2011-07-01 47 views
0

我需要有一個MySQL視圖返回每張發票號碼的單排和所有相關記錄MySQL視圖1:許多表顯示所有相關記錄在單行

發票

-------------------------------------------- 
|InvoiceID| CustomerID | InvoiceDetailsID | 
-------------------------------------------- 
| 1  | 1001  | 2200    | 
-------------------------------------------- 
| 2  | 2000  | 2100    | 
-------------------------------------------- 

詳細

----------------------------------------------- 
| ID  | DetailsID | Description | Amount | 
----------------------------------------------- 
| 1  | 2200  | 10211  | 22.00 | 
----------------------------------------------- 
| 2  | 2200  | 10212  | 12.00 | 
----------------------------------------------- 
| 3  | 2200  | 10922  | 99.00 | 
----------------------------------------------- 
| 4  | 2100  | 99111  | 1.00 | 
----------------------------------------------- 
| 5  | 2100  | 88229  | 4.50 | 
----------------------------------------------- 

需要返回如下(細節表可以有超過3個記錄每個DetailsID但我只需要顯示 前三每個DetailsI D基於ID)

------------------------------------------------------------------------------------------------------------------------------ 
| InvoiceID | CustomerID | InvoiceDetailsID | Description_1 | Amount_1 | Description_2 | Amount_2 | Description_3 | Amount_3 | 
- ----------------------------------------------------------------------------------------------------------------------------- 
| 1   | 1001  | 2200    | 10211   | 22.00 | 10212   | 12.00 | 10922   | 99.00 | 
------------------------------------------------------------------------------------------------------------------------------ 
| 2   | 2000  | 2100    | 99111   | 1.00 | 88229   | 4.50 | NULL   | NULL  | 
------------------------------------------------------------------------------------------------------------------------------ 
+2

您可能會發現更改應用程序邏輯更容易,因此簡單的連接就可以工作(如果可以的話)。然後,您可以使用嵌套select來爲每個發票返回三行。 –

+0

如果您有100張發票記錄,會發生什麼情況?你會有200多列嗎?你的設計不可擴展,坦率地說是可怕的。使用應用程序邏輯處理多個發票記錄 – Bohemian

+0

每條記錄​​單行的原因是Tableau Server需要扁平結構。控制數據CRUD的應用程序在結構上沒有問題。它旨在提供可擴展性,但Tableau是限制因素。 – Jeff

回答

0

有點醜,不是嗎?

SELECT 
    d.InvoiceID 
    , d.CustomerID 
    , d.InvoiceDetailsID 
    , (SELECT i.Description FROM InvoiceDetails i 
     WHERE i.DetailsID = d.InvoiceDetailsID 
     ORDER BY i.id LIMIT 0,1 
    ) AS Description_1 
    , (SELECT i.Amount  FROM InvoiceDetails i 
     WHERE i.DetailsID = d.InvoiceDetailsID 
     ORDER BY i.id LIMIT 0,1 
    ) AS Amount_1 
    , (SELECT i.Description FROM InvoiceDetails i 
     WHERE i.DetailsID = d.InvoiceDetailsID 
     ORDER BY i.id LIMIT 1,1 
    ) AS Description_2 
    , (SELECT i.Amount  FROM InvoiceDetails i 
     WHERE i.DetailsID = d.InvoiceDetailsID 
     ORDER BY i.id LIMIT 1,1 
    ) AS Amount_2 
    , (SELECT i.Description FROM InvoiceDetails i 
     WHERE i.DetailsID = d.InvoiceDetailsID 
     ORDER BY i.id LIMIT 2,1 
    ) AS Description_3 
    , (SELECT i.Amount  FROM InvoiceDetails i 
     WHERE i.DetailsID = d.InvoiceDetailsID 
     ORDER BY i.id LIMIT 2,1 
    ) AS Amount_3 
FROM Details AS d 
ORDER BY d.InvoiceDetailsID 
相關問題