Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SQL]Problem z zapytaniem SQL
Bolo1991
post
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

(IMG:https://images92.fotosik.pl/287/69846dcaf94b6655med.png)
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.
Go to the top of the page
+Quote Post
trueblue
post
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


A możesz wskazać gdzie zawarłeś ten warunek?
Go to the top of the page
+Quote Post
Bolo1991
post
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 ''
Go to the top of the page
+Quote Post
nospor
post
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 ?
Go to the top of the page
+Quote Post
trueblue
post
Post #5





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


To teraz zastanów się co zwraca:

  1. REPLACE(product_doc.tag_production,'DRZ','')


i czy Twój warunek zostanie spełniony dla tej kolumny.
Go to the top of the page
+Quote Post
Bolo1991
post
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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
trueblue
post
Post #7





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
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.
Go to the top of the page
+Quote Post
Bolo1991
post
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.
Go to the top of the page
+Quote Post
trueblue
post
Post #9





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Warunek należy założyć na przetworzonej kolumnie.
Go to the top of the page
+Quote Post
Bolo1991
post
Post #10





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 30.11.2019

Ostrzeżenie: (0%)
-----


Rozumiem i nie rozumiem (IMG:style_emoticons/default/smile.gif) , czyli w tym selecie ma tego nie być a ma być where ?
Go to the top of the page
+Quote Post
trueblue
post
Post #11





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
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:
  1. product_doc.tag_production<>'DRZ' AND product_doc.tag_production<>'LAK' ... itd.
Go to the top of the page
+Quote Post
Bolo1991
post
Post #12





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 30.11.2019

Ostrzeżenie: (0%)
-----


No tak jest to zrozumiałe i działające w przypadku gdy w kolumnie jest tylko jedna wartość i sobie mogę ją wykluczyć, ale co w przypadku gdy mam 3 wartości i chce wykluczyć 2 a jedną zostawić ?

(IMG:https://images91.fotosik.pl/287/30122b3b36835248med.png)

Np chce zostawić tylko wartość BRO, a reszta ma się nie pojawiać obok.
Go to the top of the page
+Quote Post
trueblue
post
Post #13





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


To wtedy pozostaje tylko ta pierwsza opcja.
Go to the top of the page
+Quote Post
Bolo1991
post
Post #14





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 30.11.2019

Ostrzeżenie: (0%)
-----


Yh czyli pierwszy który?
Go to the top of the page
+Quote Post
trueblue
post
Post #15





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


W poście #11 są dwa. Pierwszy to ten pierwszy.
Go to the top of the page
+Quote Post
Bolo1991
post
Post #16





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 30.11.2019

Ostrzeżenie: (0%)
-----


No dupa (IMG:style_emoticons/default/smile.gif) 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
Go to the top of the page
+Quote Post
trueblue
post
Post #17





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


  1. WHERE REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(product_doc.tag_production,'DRZ',''),'LAK',''),'POS',''),'NPR',''),'*',''),'HS',''),'HKS',''),'LUK',''),'SKOS',''),' ','') <> ''
Go to the top of the page
+Quote Post
Bolo1991
post
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:

(IMG:https://images92.fotosik.pl/288/9c161deeac2f9ba1med.png)
Go to the top of the page
+Quote Post
trueblue
post
Post #19





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 10:44