Piotr Trychta

Piotr Trychta Programista .NET

Temat: Select i Join...

baza MSSQL
mam w przybliżeniu takie zapytanie:

SELECT
d.[ID] AS DeliveryID,
d.[Reference] AS CurrentRequested,
rds.[DeliveryID] AS PreviousRequestedSnapshot, --ale też będzie Reference
FROM
VIEW_LatestDeliveryStatus v_lds LEFT OUTER JOIN
Delivery d ON (v_lds.DeliveryID = d.ID) LEFT OUTER JOIN
RequestedDeliverySnapshot rds ON (rds.[DeliveryID] = d.[ID])
WHERE (v_lds.[DeliveryStatusTypeID] = 5)

VIEW_LatestDeliveryStatus to jest widok który przechowuje DeliveryID i status (status 5 to przesyłki NIE zrealizowane).

RequestedDeliverySnapshot tutaj są przechowywane przesyłki NIE zrealizowane na dzień poprzedni (ta tabela to taka migawka która jest generowana w nocy).

W kolumnie CurrentRequested mają być wszystkie zamówienia nie zrealizowane (status 5), w kolumnie PreviousRequestedSnapshot wszystkie dane z tabeli RequestedDeliverySnapshot.

Wszystko było by dobrze, tylko nie mam rekordu 2010.01.0003 - oznacza to przesyłkę która na chwilę obecną jest już zrealizowana, ale jeszcze wczoraj nie była.

Jak można zmodyfikować moje zapytanie żeby mieć tą wartość?

Ma to w przybliżeniu dawać takie dane:
CurrentRequested | PreviousRequestedSnapshot
2010.01.0001 | 2010.01.0001
2010.01.0002 | 2010.01.0002
NULL | 2010.01.0003
2010.01.0004 | NULL
2010.01.0005 | 2010.01.0005
Total 4 4Piotr Trychta edytował(a) ten post dnia 15.09.10 o godzinie 19:25

konto usunięte

Temat: Select i Join...

Jesli dobrze zrozumialem, to wystarczy:

WHERE (v_lds.[DeliveryStatusTypeID] = 5 or rds.[DeliveryStatusTypeID] = 5)
Piotr Trychta

Piotr Trychta Programista .NET

Temat: Select i Join...

Ireneusz Ptak:
Jesli dobrze zrozumialem, to wystarczy:

WHERE (v_lds.[DeliveryStatusTypeID] = 5 or rds.[DeliveryStatusTypeID] = 5)

w RequestedDeliverySnapshot nie ma pola DeliveryStatusTypeID
RequestedDeliverySnapshot tworzy się ona w nocy na podstawie tabeli Delivery i statusu na dzień poprzedni, w chwili obecnej status może być inny.Piotr Trychta edytował(a) ten post dnia 15.09.10 o godzinie 19:39

konto usunięte

Temat: Select i Join...

No to skoro masz w RequestedDeliverySnapshot pole ze statusem z dnia poprzedniego, to chyba wlasnie z niego powinienes skorzystac :)
Piotr Trychta

Piotr Trychta Programista .NET

Temat: Select i Join...

Ireneusz Ptak:
No to skoro masz w RequestedDeliverySnapshot pole ze statusem z dnia poprzedniego, to chyba wlasnie z niego powinienes skorzystac :)
Nie mam pola ze statusem w w tej tabeli,
generalnie ja tej tabeli nie robiłem, ale pewnie można by dodać taka kolumnę,
ale jeśli by się dało to zrobić bez tej kolumny to proszę o pomoc :)

Edit.
Generalnie przyszło mi na myśl zrobienie przed zapytaniem, tymczasowej tabeli która by się składała z tabeli RequestedDeliverySnapshot + kolumny ze statusem o wartości 5, ale to trochę na około...Piotr Trychta edytował(a) ten post dnia 15.09.10 o godzinie 19:52

konto usunięte

Temat: Select i Join...

Chyba zaczynam rozumiec - w tej tabeli masz wylacznie te zamowienia, ktore nie byly dzien wczesniej zrealizowane?

Jezeli tak, to jakos tak powinno zadzialac (nie wiem czy taka skladnia IS NOT NULL jest w MSSQL, ale chodzi o idee ;)):

WHERE (v_lds.[DeliveryStatusTypeID] = 5 or rds.[DeliveryID] IS NOT NULL)
Piotr Trychta

Piotr Trychta Programista .NET

Temat: Select i Join...

Ireneusz Ptak:
Chyba zaczynam rozumiec - w tej tabeli masz wylacznie te zamowienia, ktore nie byly dzien wczesniej zrealizowane?

Jezeli tak, to jakos tak powinno zadzialac (nie wiem czy taka skladnia IS NOT NULL jest w MSSQL, ale chodzi o idee ;)):

WHERE (v_lds.[DeliveryStatusTypeID] = 5 or rds.[DeliveryID] IS NOT NULL)
teraz się rozumiemy, jest taka składnia w MSSQL, też tak kombinowałem ale nie działało, ale jeszcze sprawdzę rano na spokojnie.

Następna dyskusja:

EFT OUTER JOIN, sumowanie i...




Wyślij zaproszenie do