Błąd gdy % w treści warunku? (Select działa OK, Update Nie)

0

Witam Ponownie,

mam dziwny problem. Chcę aktualizować pewne pola, które wcześniej wyliczam w select - używając funkcji Sum i Case jak poniżej. Problem polega na tym, że jak uruchomię sam Select zwraca mi poprawny wynik, ale jak już całą funkcję Update (gdzie ten sam select jest źródłem to już nie działą :| )

Kod który zapisze mi w kolumna1 złe dane (nie z sumuje) - reszta ok:

Update [GeneralPOinfo]
       SET [kolumna1] = [sclip].[Wynik],
             [kolumna2] = [sclip].[CosTam],
             [kolumna3] = [sclip].[Wynik62]
FROM
       [GeneralPOinfo] as gpi
       INNER JOIN
       (
             SELECT        Po, PoLine, SUM(CASE WHEN [warunek1] = N'0%' THEN 1 ELSE 0 END) AS Wynik, SUM(cosTam) AS CosTam,
                                  SUM(CASE WHEN ([warunek2] = 0 or [warunek2] = 1) THEN 1 ELSE 0 END) As Wynik62
             FROM            mojaFajnaTablica
             GROUP BY Po, PoLine
       ) as sclip
       ON
       [gpi].[POnumber] = [sclip].[Po]
       AND
       [gpi].[POnumberLine] = [sclip].[PoLine]
       AND
       ([gpi].[PartialDelivery] = 'No' OR [gpi].[PartialDelivery] = 'Yes Finished')
 

Gdy uruchomię sam s\kod select, wyniki zwraca mi poprawne:

             SELECT        Po, PoLine, SUM(CASE WHEN [warunek1] = N'0%' THEN 1 ELSE 0 END) AS Wynik, SUM(cosTam) AS CosTam,
                                  SUM(CASE WHEN ([warunek2] = 0 or [warunek2] = 1) THEN 1 ELSE 0 END) As Wynik62
             FROM            mojaFajnaTablica
             GROUP BY Po, PoLine

Ja się pytam WTF ?! Proszę oświećcie mnie ... gdzie mi coś umyka .... mam wrażenie, że problem robi ten nieszczęsny % który jest w tekście warunku.

Pozdrawiam,
BB

0

A to coś zwraca:

select * 
FROM
       [GeneralPOinfo] AS gpi
       INNER JOIN
       (
             SELECT        Po, PoLine, SUM(CASE WHEN [warunek1] = N'0%' THEN 1 ELSE 0 END) AS Wynik, SUM(cosTam) AS CosTam,
                                  SUM(CASE WHEN ([warunek2] = 0 OR [warunek2] = 1) THEN 1 ELSE 0 END) AS Wynik62
             FROM            mojaFajnaTablica
             GROUP BY Po, PoLine
       ) AS sclip
       ON
       [gpi].[POnumber] = [sclip].[Po]
       AND
       [gpi].[POnumberLine] = [sclip].[PoLine]
       AND
       ([gpi].[PartialDelivery] = 'No' OR [gpi].[PartialDelivery] = 'Yes Finished')
 
0

Tak poprawne dane. Pole Wynik jest wyliczone jak powinno.

0

No to teraz sprecyzuj co nie działa, jakiś błąd, dane nie takie jak trzeba?

0

Ok ... zatem tak:

  • w select - działa poprawnie czyli w kolumnie Wynik otrzymuje sumę (właściwie w tym wypadku ilość) rekordów spełniających warunek gdy kolumna [Warunek1] jest równa wartości 0% - inaczej mówiąc jeśli w tej kolumnie jest 0% - to wstawia 1 jak nie to 0 później sumuje ten wynik. Jeśli mam 5 rekordów z tym samym numerem PO i tą sama POline i każda linia ma 0% to chce otrzymac wynik = 5. I gdy robie sam Select to to działa.

Ale jeśli już ten sam Select używam jako źródło do funkcji Update .... to wstawia mi wynik 1 zamiast 5 (a inne kolumny wstawia OK). Jakiś czeski błąd czy co...

1

Jeżeli join daje ci dane które oczekujesz, to update tym bardziej powinien zadzialać prawidłowo, na tym etapie bez danych i pradziwych zapytań ciężko pomóc...

0

Dzięki PAnczo za zainteresowanie i nakierowanie na rozwiązanie w sumie :)

Mówiłem, czeski błąd :| Select działał ok ... bo to select ... a Update nie działał (a właściwie działał ok) ... bo nie mół przyjąć wyniku ... pole w tablicy docelowej ustawione było na "bit", nie na "int". Oczywiście byłem przekonany, że zrobiłem tam integer .... my fault. Sorry ;)

Edit: BTW. czy gdzieś tu w atku jest opcja "zamknij" czy tylko można wskazać post z rozwiązaniem który jest widoczny na głównej ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1