Witam, mam nadzieję, że może ktoś mi pomoże rozwiązać problem.
Mamy towar, który ma przydzieloną maksymalną ilość na paletę załóżmy, że 130, jego nazwę, kodtowaru (z bazy)
Mamy ilość danego towaru, która została załadowana w całym transporcie np. 300 (z bazy)
Trzeba również obliczyć wagę z danych uzyskanych z bazy, ze wzoru powierzchnia_uzytkowa * ilosc_na_palecie * gramatura \ 1000
Do tej pory udało mi się za pomocą dwóch SELECT i join do master.dbo.spt_values na przykładzie powyższego polecenia otrzymać trzy rekordy
1 | nazwa | kod | 130 | 169
2 | nazwa | kod | 130 | 169
3 | nazwa | kod | 130 | 169
gdzie 130 to ilość, a 169 waga w kg, jest to niepoprawne, ponieważ w trzecim rekordzie powinno być ilość 40, i waga około 52.
Czy jest możliwe takie zapytanie, żeby w ostatnim rekordzie w przypadku kiedy ilosc % ilosc_na_palete != 0 zmieniało obliczenia i podstawiało w ilosc_na_palecie wynik z ilosc % ilosc_na_palete?
SELECT
WEW.Kod_towaru AS KodTowaru, WEW.Id_towaru
,WEW.Nazwa AS NazwaTowaru
,(CAST(WEW.Ilosc / PaletyBZ AS DECIMAL(15,0))) AS Ilosc /* ilosc na palecie */
,(CAST(WEW.Powierzchnia * WEW.SztNaPalete * CAST(WEW.Gramatura AS integer) / 1000 AS DECIMAL(15, 3))) as [KG]
FROM
(SELECT DISTINCT Nazwa, Ilosc, Kod_towaru, NazwaKontrahenta, Id_transakcji, Id_towaru, Powierzchnia, Gramatura
,CEILING((Ilosc/(CASE WHEN SztNaPalete<>0 THEN SztNaPalete WHEN SztNaPalete=0 THEN 1 END))) AS Palety /*zaokrąglona do góry dla otrzymania ilości palet */
,(Ilosc/(CASE WHEN SztNaPalete<>0 THEN SztNaPalete WHEN SztNaPalete=0 THEN 1 END)) AS PaletyBZ /* ilosc palet bez zaokrąglenia */
, SztNaPalete
FROM Transakcje
JOIN Inne_tabele
WHERE Kod_towaru LIKE '%1122311%' AND Id_tansakcji = 23331241) AS WEW
INNER JOIN master.dbo.spt_values ON (master.dbo.spt_values.number <= Palety AND master.dbo.spt_values.name is NULL AND master.dbo.spt_values.number<>0) /* dla wywołania 3 rekordów */