| 
					
							
        
    
        
						
			 | 
			
			
					    
					
        
         
          
         
	
            | Sortering efter sammensat streng Fra : Leif Neland | 
  Dato :  02-02-07 08:29 |  
  |  
 
            mssql
 Jeg skal have sorteret nogle hyldenumre, men de er i et besværligt format.
 {Sektionsbogstav}{reolnr}"-"{hylde}
 c1-3
 c2-4
 c11-2
 En alfabetisk sortering laver rækkefølgen c1 c11 c2 men det burde være c1 c2
 c11
 Jeg vil nødig til at omformattere feltet; kan man lave en funktion i sql, så
 man kan sortere i sql?
 Eller bør jeg lave en tabel, der afspejler den fysiske rækkefølge af
 reolerne?
 Så kan jeg selvfølgelig også få placeret reol c-v mellem c4 og c5   
Leif
            
              |   |   
            
        
 
            
         
           Kristian Damm Jensen (02-02-2007) 
         
	
            | Kommentar Fra : Kristian Damm Jensen | 
  Dato :  02-02-07 10:13 |  
  |  
 
            Leif Neland wrote:
 > mssql
 >
 > Jeg skal have sorteret nogle hyldenumre, men de er i et besværligt
 > format.
 >
 > {Sektionsbogstav}{reolnr}"-"{hylde}
 >
 > c1-3
 > c2-4
 > c11-2
 >
 > En alfabetisk sortering laver rækkefølgen c1 c11 c2 men det burde
 > være c1 c2 c11
 >
 > Jeg vil nødig til at omformattere feltet; kan man lave en funktion i
 > sql, så man kan sortere i sql?
 >
 > Eller bør jeg lave en tabel, der afspejler den fysiske rækkefølge af
 > reolerne?
 > Så kan jeg selvfølgelig også få placeret reol c-v mellem c4 og c5   
Nu skriver du ikke, hvilket DBMS du bruger. Nedenstående vil virke på Sybase 
 og formodentlig og MS SQLServer. Andre systemer har andre måder at 
 implementere substring, men ideen skulle være klar nok.
 select substring(hylde, 1, 1) as sektionsbogstav
 , convert(substring(hylde, 2, 24), int) as reolnr
 from hylder
 order by sektionsbogstav, reolnr
 >
 > Leif
 -- 
 -- 
 Venlig hilsen /Best regards
 Kristian Damm Jensen 
            
              |   |   
            
        
 
            
         
           Leif Neland (04-02-2007) 
         
	
            | Kommentar Fra : Leif Neland | 
  Dato :  04-02-07 22:48 |  
  |   
            Kristian Damm Jensen wrote:
 > Leif Neland wrote:
 >> mssql
 >>
 > Nu skriver du ikke, hvilket DBMS du bruger. Nedenstående vil virke på
 > Sybase og formodentlig og MS SQLServer. Andre systemer har andre
 > måder at implementere substring, men ideen skulle være klar nok.
 
 Jeg skrev mssql...
 > select substring(hylde, 1, 1) as sektionsbogstav
 > , convert(substring(hylde, 2, 24), int) as reolnr
 > from hylder
 > order by sektionsbogstav, reolnr
 
 den vil have "convert(int,substring(hylde,2,24))" men den kan ikke 
 konvertere "A52-3" ("52-3") til 52
 Error converting the varchar '52-3' to int.
 
 Så jeg må nok splitte det efter "-".
 
 Bare man blot kunne konvertere indtil det første non-numeriske tegn.
 
 Leif
 
 
 >
 >>
 >> Leif
 >
 > -- 
 
 
  
            
             |   |   
            
        
 
            
         
           Leif Neland (07-02-2007) 
         
	
            | Kommentar Fra : Leif Neland | 
  Dato :  07-02-07 10:15 |  
  |   
            
 "Leif Neland" <leif@neland.dk> skrev i en meddelelse
 news:45c2e82a$0$1418$edfadb0f@dread14.news.tele.dk...
 > mssql
 >
 > Jeg skal have sorteret nogle hyldenumre, men de er i et besværligt format.
 >
 > {Sektionsbogstav}{reolnr}"-"{hylde}
 >
 > c1-3
 > c2-4
 > c11-2
 >
 > En alfabetisk sortering laver rækkefølgen c1 c11 c2 men det burde være c1
 c2
 > c11
 
 Løsningen blev dette:
 
 order by substring(lagerkode,1,1),case
 charindex('-',isnull(t_produkter.lagerkode,'?')) when 0 then 0 else
 substring(lagerkode,2,charindex('-',isnull(t_produkter.lagerkode,'?'))-2)
 end, lagerkode "
 
 Jeg blev nødt til at lave case-sætningen, fordi mssql dør på negativ
 3.parameter (længde), hvis der ikke er et "-" i strengen:
 substring(lagerkode,2,-2)
 Den burde bare give den tomme streng.
 Og det ville så sikkert give en fejl, ved forsøg på at konvertere den til et
 tal...
 
 Leif
 
 
  
            
             |   |   
            
        
 
            
         
           plykkegaard@gmail.co~ (07-02-2007) 
         
	
            | Kommentar Fra : plykkegaard@gmail.co~ | 
  Dato :  07-02-07 13:16 |  
  |   
            Leif Neland wrote:
 
 > Løsningen blev dette:
 > order by substring(lagerkode,1,1), case charindex ...
 
 Vil man ikke opnå et bedre resultat ved at selecte til et view og
 derefter lave en sortering på de "virtuelle" felter?
 
 select vp.* from (
     select
         substring(tp.lagerkode,1,1) As LK1,
         case charindex('-',isnull(tp.lagerkode,'?'))
             when 0 then 0
             else
                 substring(lagerkode,
 2,charindex('-',isnull(tp.lagerkode,'?'))-2)
        end As LK2, tp.lagerkode from t_produkter tp)
     as vp
 order by vp.LK1, vp.LK2, vp.lagerkode
 
 En helt anden diskussion er om man vil gemme lagerkode i en produkt
 tabel?
 Lagerkode er det placering på lager, eller?
 
 - Peter
 
  
            
             |   |   
            
        
 
            
         
           Leif Neland (08-02-2007) 
         
	
            | Kommentar Fra : Leif Neland | 
  Dato :  08-02-07 01:32 |  
  |   
            plykkegaard@gmail.com wrote:
 > Leif Neland wrote:
 >
 >> Løsningen blev dette:
 >> order by substring(lagerkode,1,1), case charindex ...
 >
 > Vil man ikke opnå et bedre resultat ved at selecte til et view og
 > derefter lave en sortering på de "virtuelle" felter?
 >
 > select vp.* from (
 >     select
 >         substring(tp.lagerkode,1,1) As LK1,
 >         case charindex('-',isnull(tp.lagerkode,'?'))
 >             when 0 then 0
 >             else
 >                 substring(lagerkode,
 > 2,charindex('-',isnull(tp.lagerkode,'?'))-2)
 >        end As LK2, tp.lagerkode from t_produkter tp)
 >     as vp
 > order by vp.LK1, vp.LK2, vp.lagerkode
 
 Det er muligt, men det skal kun køres et par gange om dagen, med ca 50 
 records i gennemsnit, så det er ikke værd at optimere.
 
 >
 > En helt anden diskussion er om man vil gemme lagerkode i en produkt
 > tabel?
 > Lagerkode er det placering på lager, eller?
 
 Det er det.
 Det kan godt være det skal løftes ud, hvis man har flere lagre, men p.t. er 
 det en mange til een relation (?) Hver vare kan kun være på een hylde, men 
 der kan godt være flere varer på samme hylde.
 
 Leif
 
 >
 > - Peter 
 
 
  
            
             |   |   
            
        
 
    
 
					
					 
			 | 
			
				
        
			 |