none
Query Split Data RRS feed

  • Pertanyaan

  • Saya mempunya tabel pegawai, ketika saya jalankan query :

    select  count(*) as jml_pegawai,
     usia =
    		case 
    		when (year(getdate())- year(tgl_lahir)) <= 25 then ' < 25'
    		when( year(getdate())- year(tgl_lahir)) >= 26 and ( year(getdate())- year(tgl_lahir)) <= 30 then '26 s/d 30'
    		when( year(getdate())- year(tgl_lahir)) >= 31 and ( year(getdate())- year(tgl_lahir)) <= 35 then '31 s/d 35'
    		when( year(getdate())- year(tgl_lahir)) >= 36 and ( year(getdate())- year(tgl_lahir)) <= 40 then '36 s/d 40'
    		when( year(getdate())- year(tgl_lahir)) >= 41 and ( year(getdate())- year(tgl_lahir)) <= 45 then '41 s/d 45'
    		when( year(getdate())- year(tgl_lahir)) >= 46 and ( year(getdate())- year(tgl_lahir)) <= 50 then '46 s/d 50'
    		when( year(getdate())- year(tgl_lahir)) >= 51  then '> 51'
    		end
    
            from pegawai p
    
            where year(tgl_lahir) is not null 
    	
            group by  case 
    		when (year(getdate())- year(tgl_lahir)) <= 25 then ' < 25'
    		when( year(getdate())- year(tgl_lahir)) >= 26 and ( year(getdate())- year(tgl_lahir)) <= 30 then '26 s/d 30'
    		when( year(getdate())- year(tgl_lahir)) >= 31 and ( year(getdate())- year(tgl_lahir)) <= 35 then '31 s/d 35'
    		when( year(getdate())- year(tgl_lahir)) >= 36 and ( year(getdate())- year(tgl_lahir)) <= 40 then '36 s/d 40'
    		when( year(getdate())- year(tgl_lahir)) >= 41 and ( year(getdate())- year(tgl_lahir)) <= 45 then '41 s/d 45'
    		when( year(getdate())- year(tgl_lahir)) >= 46 and ( year(getdate())- year(tgl_lahir)) <= 50 then '46 s/d 50'
    		when( year(getdate())- year(tgl_lahir)) >= 51  then '> 51'
    	end

    hasilnya adalah :

    | jml_pegawai | usia |

    4 < 25
    2 > 51
    87 26 s/d 30
    85 31 s/d 35
    22 36 s/d 40
    5 41 s/d 45
    6 46 s/d 50


    saya ingin memecah hasil query data tersebut menjadi

    | JML_PRIA | JML_WANITA |USIA |

      ..........   .............  ............

      ..........   .............  ............

    mohon arahan dari para master,

    Terima kasih


    • Diedit oleh Abiyyi Minggu, 03 Maret 2013 11.04 salah
    Minggu, 03 Maret 2013 11.02

Jawaban

  • Anda bisa gunakan PIVOT untuk mendapatkan hasil seperti yang dimaksud.

    Misal di tabel pegawai ada kolom Kelamin dan tgl_lahir. Yang mana kolom Kelamin berisi nilai 'Male' dan 'Female'. Anda bisa gunakan contoh query berikut.

    SELECT [Male], [Female], [Umur] FROM
    (
    	SELECT 
    		Kelamin, 
    		Umur = 
    			CASE 
    				WHEN (datepart(year, getdate()-TglLahir)-1900) <= 25 THEN '< 25'
    				WHEN (datepart(year, getdate()-TglLahir)-1900 >= 26) AND (datepart(year, getdate()-TglLahir)-1900 <= 30) THEN '26 s/d 30'
    				WHEN (datepart(year, getdate()-tgl_lahir)-1900 >= 31) AND (datepart(year, getdate()-tgl_lahir)-1900 <= 35) THEN '31 s/d 35'
    				WHEN (datepart(year, getdate()-tgl_lahir)-1900 >= 36) AND (datepart(year, getdate()-tgl_lahir)-1900 <= 40) THEN '36 s/d 40'
    				WHEN (datepart(year, getdate()-tgl_lahir)-1900 >= 41) AND (datepart(year, getdate()-tgl_lahir)-1900 <= 45) THEN '41 s/d 45'
    				WHEN (datepart(year, getdate()-tgl_lahir)-1900 >= 46) AND (datepart(year, getdate()-tgl_lahir)-1900 <= 50) THEN '45 s/d 50'
    				ELSE '> 51'
    			END
    	FROM pegawai
    ) up
    PIVOT (COUNT(Kelamin) FOR Kelamin IN ([Male], [Female])) AS pvt
    
    Saya sedikit memperbaiki perhitungan umur dengan memperhitungkan tanggal lahir. Jadi yang lahir pada 1 Maret 1980 saat ini berumur 33 sedangkan yang lahir pada tanggal 20 Maret baru berumur 32 tahun.

    Ahmad Masykur http://www.masykur.web.id/

    Senin, 04 Maret 2013 05.14