[SQL]Problem z zapytaniem SQL |
[SQL]Problem z zapytaniem SQL |
30.11.2019, 09:41:31
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. |
|
|
30.11.2019, 09:50:13
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 761 Pomógł: 1822 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
A możesz wskazać gdzie zawarłeś ten warunek?
-------------------- |
|
|
30.11.2019, 09:59:15
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 ''
|
|
|
30.11.2019, 10:06:35
Post
#4
|
|
Grupa: Moderatorzy Postów: 36 455 Pomógł: 6292 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 |
|
|
30.11.2019, 10:08:42
Post
#5
|
|
Grupa: Zarejestrowani Postów: 6 761 Pomógł: 1822 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. -------------------- |
|
|
30.11.2019, 10:14:05
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 |
|
|
30.11.2019, 10:16:10
Post
#7
|
|
Grupa: Zarejestrowani Postów: 6 761 Pomógł: 1822 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. -------------------- |
|
|
30.11.2019, 10:18:45
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.
|
|
|
30.11.2019, 10:19:18
Post
#9
|
|
Grupa: Zarejestrowani Postów: 6 761 Pomógł: 1822 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
Warunek należy założyć na przetworzonej kolumnie.
-------------------- |
|
|
30.11.2019, 11:16:53
Post
#10
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 30.11.2019 Ostrzeżenie: (0%) |
Rozumiem i nie rozumiem , czyli w tym selecie ma tego nie być a ma być where ?
|
|
|
30.11.2019, 11:24:24
Post
#11
|
|
Grupa: Zarejestrowani Postów: 6 761 Pomógł: 1822 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:
-------------------- |
|
|
30.11.2019, 11:36:49
Post
#12
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 30.11.2019 Ostrzeżenie: (0%) |
|
|
|
30.11.2019, 11:40:24
Post
#13
|
|
Grupa: Zarejestrowani Postów: 6 761 Pomógł: 1822 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
To wtedy pozostaje tylko ta pierwsza opcja.
-------------------- |
|
|
30.11.2019, 14:35:39
Post
#14
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 30.11.2019 Ostrzeżenie: (0%) |
Yh czyli pierwszy który?
|
|
|
30.11.2019, 15:16:04
Post
#15
|
|
Grupa: Zarejestrowani Postów: 6 761 Pomógł: 1822 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
W poście #11 są dwa. Pierwszy to ten pierwszy.
-------------------- |
|
|
30.11.2019, 19:56:25
Post
#16
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 30.11.2019 Ostrzeżenie: (0%) |
No dupa Nie działa, zapis teraz wygląda tak, o ile teraz nie pokazuje mi pustych to za chiny ludowe nie mogę usunąć np 'DRZ'.
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 |
|
|
30.11.2019, 20:15:46
Post
#17
|
|
Grupa: Zarejestrowani Postów: 6 761 Pomógł: 1822 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
-------------------- |
|
|
30.11.2019, 20:54:27
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: |
|
|
30.11.2019, 22:11:57
Post
#19
|
|
Grupa: Zarejestrowani Postów: 6 761 Pomógł: 1822 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: 23.04.2024 - 16:44 |