Mam następujący problem: potrzebuję za pomocą kwerendy z jednego wiersza tabeli zwrócić kilka wierszy kwerendy (jedno z pól tabeli podawałoby, ile kopii miałoby być w wyniku).
Skąd taka, może trochę dziwna, potrzeba: mam bazę danych zabudowanych akumulatorów, i czasami w jednej baterii pracuje kilka identycznych. Zamiast poświęcać oddzielny wiersz każdemu z nich, po prostu w jednej z komórek podana jest ich ilość (zmniejsza to ilość danych i jest wygodniejsze). Potrzebuję jednak dla każdego z nich wygenerować metrykę, w związku z tym w wyniku kwerendy, na podstawie której będzie generowany raport, wiersze miały by być dublowane (zmieniać miałby się tylko numer porządkowy, kolejny od 1 do liczby akumulatorów).
Szukałem jakiegoś rozwiązania SQL, ale niestety nic sensownego nie znalazłem (może dlatego, że poruszam się w temacie jeszcze nieco po omacku).
Ma ktoś pomysł na rozwiązanie?
Dublowanie (zwielokratnianie) wyników kwerendy
Dublowanie (zwielokratnianie) wyników kwerendy
LibreOffice 4.4.3.2 - Linux Mint 17.2
Re: Dublowanie (zwielokratnianie) wyników kwerendy
Gwoli prawdy winno być odwrotnie: każda jednostka w osobnym rekordzie, a w widoku raportu grupowanie wg typu z polem wskazującym liczbę jednostek. Projekt bazy zaczęty od końca zamiast od początku.
Proste remedium polega na dodaniu tabeli z jedną kolumną, w której będą klucze wpisów akumulatorów zwielokrotnione tyle razy ile trzeba. Jeśli więc bateria 2012 posiada 3 akumulatory, w dodatkowej tabeli 2012 musi pojawić się 3-krotnie. I bierzesz do zapytania złączenie obu tabel, czyli SELECT * FROM AKU JOIN KLUCZE USING(ID);
ID to nazwa kolumny z kluczami baterii, wspólna dla obu tabel.
Inna metoda to użycie proceduralnego SQL. Jeszcze inna to makro w kliencie bazy zamiast pojedynczego zapytania. Nie polecam.
Więcej pomysłów: google :: sql get records n times
Proste remedium polega na dodaniu tabeli z jedną kolumną, w której będą klucze wpisów akumulatorów zwielokrotnione tyle razy ile trzeba. Jeśli więc bateria 2012 posiada 3 akumulatory, w dodatkowej tabeli 2012 musi pojawić się 3-krotnie. I bierzesz do zapytania złączenie obu tabel, czyli SELECT * FROM AKU JOIN KLUCZE USING(ID);
ID to nazwa kolumny z kluczami baterii, wspólna dla obu tabel.
Inna metoda to użycie proceduralnego SQL. Jeszcze inna to makro w kliencie bazy zamiast pojedynczego zapytania. Nie polecam.
Więcej pomysłów: google :: sql get records n times
JJ
LO (25.2|24.8) ∙ Python (3.12|3.10) ∙ Unicode 16 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
LO (25.2|24.8) ∙ Python (3.12|3.10) ∙ Unicode 16 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)