![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 30.11.2019 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Jako że jestem na początku drogi z SQL, mam pytanie w sprawie jednego zapytania: Kod select doc.doc_user_number As [Numer Umowy],product_doc.order_number As [Pozycja],product_doc.quantity As [Ilość sztuk],replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(product_doc.tag_production,'DRZ',''),'LAK',''),'POS',''),'NPR',''),'*',''),'HS',''),'HKS',''),'LUK',''),'SKOS',''),' ','') As [Tag] ,Production_line.production_line_type As [Linia],doc.doc_status_id As [Status Umowy],doc.doc_delivery_date As [Data wyjazdu], replace(replace(replace(replace(replace(replace(replace(replace(doc.tag_feature,'*1:',''),'*2:',' '),'MD',''),'AD',''),'ELEG',''),'88',''),'HS',''),'*','') As [Kolor] from [PAM_TEST].dbo.doc join dbo.doc_status on doc_status.id = doc.doc_status_id join dbo.Production_line on Production_line.branch_id = doc.branch_id join dbo.product_doc on product_doc.doc_id = doc.id where product_doc.tag_production not like '' And doc.tag_feature not like '' And doc.tag_feature not like '%2K:%' And doc.tag_feature not like '%1S:%' And doc.doc_status_id = 7 And Production_line.production_line_type = -2 group by Production_line.production_line_type, doc.doc_user_number, doc.doc_status_id, doc.doc_delivery_date, doc.tag_feature,product_doc.tag_production, product_doc.order_number,product_doc.quantity order by doc.doc_delivery_date asc ![]() Wszystko niby fajnie pokazuje, lecz pokazuje mi wartości puste z jednej kolumny mimo że rozgraniczyłem, żeby nie pokazywać. Proszę o doradzenie co robię źle. |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1827 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
A możesz wskazać gdzie zawarłeś ten warunek?
-------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 30.11.2019 Ostrzeżenie: (0%) ![]() ![]() |
Kod where product_doc.tag_production not like ''
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
A jestes pewien ze tam sa puste teksty? Moze tam sa NULLe ?
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1827 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
To teraz zastanów się co zwraca:
i czy Twój warunek zostanie spełniony dla tej kolumny. -------------------- |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 30.11.2019 Ostrzeżenie: (0%) ![]() ![]() |
Nulli nie ma bo sprawdzałem,
No ten warunek ma zamieniać wartość "DRZ' na puste, bo nie które znaki muszę zamieniać na puste, żeby ich nie pokazywać, a potem chce nie pokazywać pustych ![]() |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1827 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Ten warunek nic nie zamienia, bo to nie warunek.
Nie sądzisz, że operujesz na "surowej" wartości w warunku, a wyświetlasz przetworzoną? Jednym słowem Twój warunek ma się nijak, do kolumny Tag. -------------------- |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 30.11.2019 Ostrzeżenie: (0%) ![]() ![]() |
No ok, czyli rozumiem że to rozwiązanie jest złe, a jakie jest poprawne ? Po proszę o naprowadzenie.
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1827 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Warunek należy założyć na przetworzonej kolumnie.
-------------------- |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 30.11.2019 Ostrzeżenie: (0%) ![]() ![]() |
Rozumiem i nie rozumiem
![]() |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1827 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Niezoptymalizowne rozwiązanie, to takie, że przenosisz całą wyliczaną kolumnę do WHERE (i porównujesz z ''), bo chcesz się pozbyć pustych wartości po przetworzeniu, a nie na "surowej" kolumnie.
A gdy to zrobisz, to zauważysz, że nie ma sensu wyliczanie tej kolumny (cała ta gąsienica z REPLACE), bo i tak chcesz się pozbyć wierszy z '', co się sprowadza do warunku:
-------------------- |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 30.11.2019 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1827 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
To wtedy pozostaje tylko ta pierwsza opcja.
-------------------- |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 30.11.2019 Ostrzeżenie: (0%) ![]() ![]() |
Yh czyli pierwszy który?
|
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1827 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
W poście #11 są dwa. Pierwszy to ten pierwszy.
-------------------- |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 30.11.2019 Ostrzeżenie: (0%) ![]() ![]() |
No dupa
![]() Kod select doc.doc_user_number As [Numer Umowy],product_doc.order_number As [Pozycja],product_doc.quantity As [Ilość sztuk],replace(product_doc.tag_production,'*',' ') As [Tag]
,Production_line.production_line_type As [Linia],doc.doc_status_id As [Status Umowy],doc.doc_delivery_date As [Data wyjazdu], replace(replace(replace(replace(replace(replace(replace(replace(doc.tag_feature,'*1:',''),'*2:',' '),'MD',''),'AD',''),'ELEG',''),'88',''),'HS',''),'*','') As [Kolor] from [PAM_TEST].dbo.doc join dbo.doc_status on doc_status.id = doc.doc_status_id join dbo.Production_line on Production_line.branch_id = doc.branch_id join dbo.product_doc on product_doc.doc_id = doc.id where product_doc.tag_production not like '' And product_doc.tag_production <> 'DRZ' And doc.tag_feature not like '' And doc.tag_feature not like '%2K:%' And doc.tag_feature not like '%1S:%' And doc.doc_status_id = 7 And Production_line.production_line_type = -2 group by Production_line.production_line_type, doc.doc_user_number, doc.doc_status_id, doc.doc_delivery_date, doc.tag_feature,product_doc.tag_production, product_doc.order_number,product_doc.quantity order by doc.doc_delivery_date asc |
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1827 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
-------------------- |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 30.11.2019 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki, ale efekt nie jest taki jak być powinien :
Kod select doc.doc_user_number As [Numer Umowy],product_doc.order_number As [Pozycja],product_doc.quantity As [Ilość sztuk],replace(product_doc.tag_production,'*',' ') As [Tag] ,Production_line.production_line_type As [Linia],doc.doc_status_id As [Status Umowy],doc.doc_delivery_date As [Data wyjazdu], replace(replace(replace(replace(replace(replace(replace(replace(doc.tag_feature,'*1:',''),'*2:',' '),'MD',''),'AD',''),'ELEG',''),'88',''),'HS',''),'*','') As [Kolor] from [PAM_TEST].dbo.doc join dbo.doc_status on doc_status.id = doc.doc_status_id join dbo.Production_line on Production_line.branch_id = doc.branch_id join dbo.product_doc on product_doc.doc_id = doc.id where REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(product_doc.tag_production,'DRZ',''),'LAK',''),'POS',''),'NPR',''),'*',''),'HS',''),'HKS',''),'LUK',''),'SKOS',''),' ','') <> '' And doc.tag_feature not like '' And doc.tag_feature not like '%2K:%' And doc.tag_feature not like '%1S:%' And doc.doc_status_id = 7 And Production_line.production_line_type = -2 group by Production_line.production_line_type, doc.doc_user_number, doc.doc_status_id, doc.doc_delivery_date, doc.tag_feature,product_doc.tag_production, product_doc.order_number,product_doc.quantity order by doc.doc_delivery_date asc Rezultat: ![]() |
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1827 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
W SELECT zostawiasz tak jak było na początku. Zmieniasz tylko warunek w klauzuli WHERE na ten, który podałem. Teraz w WHERE jest ok, ale popsułeś w SELECT.
W SELECT i WHERE ma być ta gąsienica. Inne rozwiązanie, to owinąć pierwotne zapytanie, a warunek (na tej przeliczonej kolumnie Tag) przenieść do zewnętrznego SELECT. -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 6.07.2025 - 18:35 |