| 
					
							
        
    
        
						
			 | 
			
			
					    
					
        
         
          
         
	
            | MSSQL select problem Fra : Bent Jensen | 
  Dato :  24-01-08 12:21 |  
  |   
            Hej NG
 
 Jeg vil meget gerne vælge alle de emner hvor mere end et emne har
 samme indhold i feltet. Altså en slags modsat distinct
 
 
 Hvis tabellen eksempelvist ser sådan her ud
 
 ID Felt
 1  abc
 2  bla
 3  abc
 4  noget
 5  noget andet
 6  bla
 7  abc
 
 Vi jeg have udvalgt emnerne med ID 1,2,3,6 og 7
 
 Er der nogen der kan hjælpe mig med det?
 
  
            
             |   |   
            
        
 
            
         
           Gert Krabsen (24-01-2008) 
         
	
            | Kommentar Fra : Gert Krabsen | 
  Dato :  24-01-08 12:47 |  
  |   
            Bent Jensen (slet B8X36) skrev:
 > Hej NG
 > 
 > Jeg vil meget gerne vælge alle de emner hvor mere end et emne har
 > samme indhold i feltet. Altså en slags modsat distinct
 > 
 > 
 > Hvis tabellen eksempelvist ser sådan her ud
 > 
 > ID Felt
 > 1  abc
 > 2  bla
 > 3  abc
 > 4  noget
 > 5  noget andet
 > 6  bla
 > 7  abc
 > 
 > Vi jeg have udvalgt emnerne med ID 1,2,3,6 og 7
 > 
 > Er der nogen der kan hjælpe mig med det?
 
 
 SELECT tabel.felt, Count(tabel.id) AS Antal
 FROM tabel
 GROUP BY tabel.felt
 HAVING (Count(tabel.id)>1);
  
            
             |   |   
            
        
 
            
         
           Henrik Davidsen (04-02-2008) 
         
	
            | Kommentar Fra : Henrik Davidsen | 
  Dato :  04-02-08 22:06 |  
  |   
            >> Jeg vil meget gerne vælge alle de emner hvor mere end et emne har
 >> samme indhold i feltet. Altså en slags modsat distinct
 
 > SELECT tabel.felt, Count(tabel.id) AS Antal
 > FROM tabel
 > GROUP BY tabel.felt
 > HAVING (Count(tabel.id)>1);
 
 Hvis du bruger MSSQL2005 kan man også benytte den lidt mere eksotiske 
 ROW_NUMBER funktion:
 
 WITH CTE_temp
 AS
 (
 SELECT
   ID,
   ROW_NUMBER() OVER(PARTITION BY Felt ORDER BY ID) AS RowNumber
 FROM dinTabel
 )
 
 SELECT ID
 FROM CTE_temp
 WHERE RowNumber = 2
 
 Det kan muligvis også klares uden brug af en CTE (jeg har dog ikke testet om 
 denne syntax spiller)
 
 SELECT ID
 FROM dinTabel
 WHERE ROW_NUMBER() OVER(PARTITION BY Felt ORDER BY ID) = 2
 
 /Sjang
 MSCTS 
 
 
 
  
            
             |   |   
            
        
 
            
         
            Henrik Davidsen (05-02-2008) 
         
	
            | Kommentar Fra : Henrik Davidsen | 
  Dato :  05-02-08 20:05 |  
  |   
            > Det kan muligvis også klares uden brug af en CTE (jeg har dog ikke testet 
 > om denne syntax spiller)
 >
 > SELECT ID
 > FROM dinTabel
 > WHERE ROW_NUMBER() OVER(PARTITION BY Felt ORDER BY ID) = 2
 
 Jeg har testet det nu, og det kan man ikke. ROW_NUMBER kan kun bruges i en 
 order by eller en select.
 
 /Sjang 
 
 
 
  
            
             |   |   
            
        
 
    
 
					
					 
			 | 
			
				
        
			 |