Pivot Table Dengan MySQL – Panduan Lengkap

Pada kesempatan ini, kita akan membahas bagaimana cara membuat pivot table dengan MySQL.

Pivot tabel yang dimaksud disini sama seperti ketika kita membuat pivot table dengan Microsoft Excel, dimana kita membuat sumary dari suatu data dengan mengubah baris menjadi kolom.

Pada MySQL, kita tidak dapat langsung membuat pivot tabel seperti pada database lain yang memiliki fungsi PIVOT, melainkan kita harus mendefinisikan kolom satu per satu.

Hal ini sejalan dengan konsep bahwa SQL bukan bahasa dinamis yang bisa melakukan fungsi perulangan seperti bahasa pemrograman umumnya, melainkan bahasa statis dan tetap, sehingga dalam menuliskan query kita harus menulis secara manual.

Namun demikian untuk data dinamis, kita tetap dapat membuat query secara otomatis, namun  perlu “jalan memutar” alias jalan tidak langsung,  pembahasan tentang topik ini cukup panjang, sehingga perlu pembahasan tersendiri.

I.  Persiapan DATA

Baiklah, langsung saja, untuk dapat membuat pivot tabel dengan MySQL, tentu kita perlu suatu data, agar lebih mudah, kali ini kita akan menggunakan satu tabel saja yaitu tabel tabel_sales

Tabel tersebut terdiri dari 5 kolom yaitu, id_trx, nama, tgl_trx, tim, dan nilai_trx. Isi dari tabel tersebut tampak seperti tabel berikut:

id_trx nama tgl_trx tim nilai_trx
1 Alfa 2016-01-10 1 250000
2 Charlie 2016-01-02 2 175000
3 Bravo 2016-01-01 1 310000
4 Bravo 2016-02-04 1 250000
5 Alfa 2016-01-15 1 300000
6 Charlie 2016-01-13 2 325000
7 Bravo 2016-02-07 1 275000
8 Bravo 2016-03-06 1 150000
9 Alfa 2016-02-05 1 215000
10 Alfa 2016-02-22 1 350000
11 Alfa 2016-02-02 1 450000
12 Alfa 2016-03-12 1 150000
13 Alfa 2016-03-17 1 225000
14 Bravo 2016-03-11 1 150000
15 Bravo 2016-03-18 1 150000
16 Charlie 2016-01-23 2 350000
17 Charlie 2016-02-22 2 300000
18 Charlie 2016-03-21 2 275000
19 Charlie 2016-03-12 2 450000
20 Delta 2016-02-11 2 450000
21 Delta 2016-02-17 2 550000
22 Delta 2016-03-11 2 370000

Tabel diatas sudah cukup informatif, namun masih  dapat dibuat lebih informatif lagi, terutama ketika membandingkan data secara horizontal.

II.  Pivot Table Dengan MySQL

Pada pivot table kali ini, kita akan menampilkan data penjualan per bulan per nama petugas. Adapun query yang kita perlukan adalah sebagai berikut:

SELECT  nama,
	SUM( IF( MONTH(tgl_trx) = 1, nilai_trx, 0) ) AS januari,
	SUM( IF( MONTH(tgl_trx) = 2, nilai_trx, 0) ) AS februari,
	SUM( IF( MONTH(tgl_trx) = 3, nilai_trx, 0) ) AS maret,
	SUM( nilai_trx ) AS total_trx
FROM tabel_sales
GROUP BY nama

Hasil yang kita peroleh adalah:

+---------+---------+----------+--------+-----------+
| nama    | januari | februari | maret  | total_trx |
+---------+---------+----------+--------+-----------+
| Alfa    |  550000 |  1015000 | 375000 |   1940000 |
| Bravo   |  310000 |   525000 | 450000 |   1285000 |
| Charlie |  850000 |   300000 | 725000 |   1875000 |
| Delta   |       0 |  1000000 | 370000 |   1370000 |
+---------+---------+----------+--------+-----------+

Tabel yang dihasilkan jauh lebih informatif dibanding dengan tabel aslinya, kita dapat membandingkan dengan mudah data penjualan per bulan.

Pada query diatas kita menggunakan fungsi SUM untuk menjumlahkan data per kolom, lebih jauh tentang fungsi ini dapat dibaca pada artikel:  Menggunakan SUM IF untuk menjumlahkan nilai field/kolom suatu Tabel pada MySQL

Selain itu, kita juga menggunakan fungsi MONTH untuk mengambil data bulan pada kolom tgl_trx, jika hasil yang diperoleh angka 1, maka kita masukkan ke kolom januari, jika 2 ke februari, dan jika 3 ke kolom maret, selanjutnya kita gunakan fungsi SUM(nilai_trx) untuk membuat kolom total.

Melengkapi Tampilan Data

Agar lebih informatif, mari kita tambahkan data jumlah transaksi. Kita ubah query menjadi seperti ini:

SELECT  
	nama,
	SUM( IF( MONTH(tgl_trx) = 1, nilai_trx, 0) ) AS januari,
	COUNT( IF( MONTH(tgl_trx) = 1, id_trx, NULL) ) AS trx_1,
	SUM( IF( MONTH(tgl_trx) = 2, nilai_trx, 0) ) AS februari,
	COUNT( IF( MONTH(tgl_trx) = 2, nilai_trx, NULL) ) AS trx_2,
	SUM( IF( MONTH(tgl_trx) = 3, nilai_trx, 0) ) AS maret,
	COUNT( IF( MONTH(tgl_trx) = 3, nilai_trx, NULL) ) AS trx_3,
	
	COUNT(id_trx) AS jml_trx,
	SUM( nilai_trx ) AS total_trx
FROM tabel_sales
GROUP BY nama

Hasil yang kita peroleh:

+---------+---------+-------+----------+-------+--------+-------+---------+-----------+
| nama    | januari | trx_1 | februari | trx_2 | maret  | trx_3 | jml_trx | total_trx |
+---------+---------+-------+----------+-------+--------+-------+---------+-----------+
| Alfa    |  550000 |     2 |  1015000 |     3 | 375000 |     2 |       7 |   1940000 |
| Bravo   |  310000 |     1 |   525000 |     2 | 450000 |     3 |       6 |   1285000 |
| Charlie |  850000 |     3 |   300000 |     1 | 725000 |     2 |       6 |   1875000 |
| Delta   |       0 |     0 |  1000000 |     2 | 370000 |     1 |       3 |   1370000 |
+---------+---------+-------+----------+-------+--------+-------+---------+-----------+

Pada query diatas, saya sengaja menambahkan baris kosong agar query lebih mudah dibaca.

Pada query diatas kita menggunakan fungsi  COUNT untuk menghitung jumlah baris lebih jauh tentang fungsi ini dapat dibaca pada artikel:  Menghitung Field/Kolom Pada Tabel MySQL Dengan Kondisi Tertentu Menggunakan COUNT IF

Perhatikan bahwa pada fungsi COUNT, seperti pada  COUNT(IF(MONTH(tgl_trx) = 1, id_trx, NULL)) AS trx_1), kita menggunakan NULL, bukan angka 0 seperti yang kita gunakan pada fungsi SUM

Hal tersebut disebabkan karena fungsi COUNT  juga akan menghitung baris dengan nilai 0, sehingga hasil yang kita peroleh menjadi tidak akurat, agar tidak ikut dihitung, kita gunakan nilai NULL

III. Pivot Table Dengan MySQL – Menambahkan Baris Total Dengan WITH ROLLUP

Tabel diatas masih belum lengkap karena belum ada data total nilai transaksi per bulannya, untuk itu mari kita buat baris baru yang berisi total penjualan per bulan, jalankan query berikut:

SELECT  IFNULL(nama, 'TOTAL') AS nama_sales,
	SUM( IF( MONTH(tgl_trx) = 1, nilai_trx, 0) ) AS januari,
	SUM( IF( MONTH(tgl_trx) = 2, nilai_trx, 0) ) AS februari,
	SUM( IF( MONTH(tgl_trx) = 3, nilai_trx, 0) ) AS maret,
	COUNT(id_trx) AS jml_trx,
	SUM( nilai_trx ) AS total_trx
FROM tabel_sales
GROUP BY nama
WITh ROLLUP

Hasil yang kita peroleh adalah:

+------------+---------+----------+---------+---------+-----------+
| nama_sales | januari | februari | maret   | jml_trx | total_trx |
+------------+---------+----------+---------+---------+-----------+
| Alfa       |  550000 |  1015000 |  375000 |       7 |   1940000 |
| Bravo      |  310000 |   525000 |  450000 |       6 |   1285000 |
| Charlie    |  850000 |   300000 |  725000 |       6 |   1875000 |
| Delta      |       0 |  1000000 |  370000 |       3 |   1370000 |
| TOTAL      | 1710000 |  2840000 | 1920000 |      22 |   6470000 |
+------------+---------+----------+---------+---------+-----------+

Pada contoh diatas, terdapat tambahan baris baru yaitu baris TOTAL, sehingga sekarang kita sudah dapat membandingkan total penjualan perbulan.

Pada query diatas, klausa WITH ROLLUP akan menambahkan sebuah baris baru, baris tersebut akan menjumlahkan kolom yang ada fungsi agregatnya, yaitu kolom  januari, februari, maret, jml_trx, dan  total_trx. Kolom jml_trx terdapat fungsi COUNT, sedangkan yang lain fungsi SUM

Selanjutnya, pada baris baru tersebut, MySQL akan memberikan nilai NULL pada kolom yang ada pada klausa GROUP BY, yang pada contoh diatas, kolom nama_sales.

Agar lebih bermakna, nilai NULL tersebut  kita ganti dengan kata TOTAL, untuk itu kita gunakan fungsi IFNULL  yaitu pada  IFNULL(nama, 'TOTAL') AS nama_sales, yang artinya jika kolom bernilai NULL, maka ganti dengan kata TOTAL.

Menambahkan Baris  Subtotal Pada Pivot Table

Selanjutnya pada kondisi tertentu kita perlu untuk menampilkan data subtotal. Terkait contoh diatas, kita akan membuat subtotal berdasarkan tim, sehingga diketahui kinerja dari masing-masing tim.

Query yang kita perlukan adalah:

SELECT  
	IFNULL( nama, 'SUB TOTAL' ) AS nama_sales,
	IFNULL( tim, 'TOTAL' ) AS sales_tim,
	 
	SUM( IF( MONTH(tgl_trx) = 1, nilai_trx, 0) ) AS januari,
	COUNT( IF( MONTH(tgl_trx) = 1, id_trx, NULL) ) AS trx_1,
	SUM( IF( MONTH(tgl_trx) = 2, nilai_trx, 0) ) AS februari,
	COUNT( IF( MONTH(tgl_trx) = 2, nilai_trx, NULL) ) AS trx_2,
	SUM( IF( MONTH(tgl_trx) = 3, nilai_trx, 0) ) AS maret,
	COUNT( IF( MONTH(tgl_trx) = 3, nilai_trx, NULL) ) AS trx_3,
	
	COUNT(id_trx) AS jml_trx,
	SUM( nilai_trx ) AS total_trx
FROM tabel_sales
GROUP BY tim, nama
WITH ROLLUP

Hasil yang kita peroleh adalah:

+------------+-----------+---------+-------+----------+-------+---------+-------+---------+-----------+
| nama_sales | sales_tim | januari | trx_1 | februari | trx_2 | maret   | trx_3 | jml_trx | total_trx |
+------------+-----------+---------+-------+----------+-------+---------+-------+---------+-----------+
| Alfa       | 1         |  550000 |     2 |  1015000 |     3 |  375000 |     2 |       7 |   1940000 |
| Bravo      | 1         |  310000 |     1 |   525000 |     2 |  450000 |     3 |       6 |   1285000 |
| SUB TOTAL  | 1         |  860000 |     3 |  1540000 |     5 |  825000 |     5 |      13 |   3225000 |
| Charlie    | 2         |  850000 |     3 |   300000 |     1 |  725000 |     2 |       6 |   1875000 |
| Delta      | 2         |       0 |     0 |  1000000 |     2 |  370000 |     1 |       3 |   1370000 |
| SUB TOTAL  | 2         |  850000 |     3 |  1300000 |     3 | 1095000 |     3 |       9 |   3245000 |
| SUB TOTAL  | TOTAL     | 1710000 |     6 |  2840000 |     8 | 1920000 |     8 |      22 |   6470000 |
+------------+-----------+---------+-------+----------+-------+---------+-------+---------+-----------+

Perhatikan bahwa sekarang muncul baris baru dengan nama SUB TOTAL, baris baru ini mucul karena kita menambahkan kolom tim pada klausa GROUP BY, sehingga ketika klausa WITH ROLLUP dijalankan, MySQL akan menghitung subtotal berdasarkan kolom tim + nama.

Mengubah Urutan Data Pivot Table

Jika kita perhatikan, setiap data yang dihasilkan  oleh klausa GROUP BY, akan ditampilkan dengan rapi, urut mulai dari nilai yang terkecil ke nilai yang terbesar.

Misal pada contoh sebelumnya, data pada kolom nama_sales diurutkan berdasarkan abjad terkecil ke terbesar, demikian juga dengan kolom tim.

Kenapa demikian? hal ini disebabkan karena ketika menjalankan klausa GROUP BY, MySQL akan sekaligus mengurutkan data secara ascending (urut dari terkecil ke terbesar) yang sering disebut implisit order.

Kita dapat mengubah pola pengurutan tersebut dengan menambahkan ASC atau DESC pada klausa GROUP BY. Misal kita ubah urutan nama dan tim menjadi descending.

Jalankan query berikut:

SELECT  
	IFNULL( nama, 'SUB TOTAL' ) AS nama_sales,
	IFNULL( tim, 'TOTAL' ) AS sales_tim,
	 
	SUM( IF( MONTH(tgl_trx) = 1, nilai_trx, 0) ) AS januari,
	COUNT( IF( MONTH(tgl_trx) = 1, id_trx, NULL) ) AS trx_1,
	SUM( IF( MONTH(tgl_trx) = 2, nilai_trx, 0) ) AS februari,
	COUNT( IF( MONTH(tgl_trx) = 2, nilai_trx, NULL) ) AS trx_2,
	SUM( IF( MONTH(tgl_trx) = 3, nilai_trx, 0) ) AS maret,
	COUNT( IF( MONTH(tgl_trx) = 3, nilai_trx, NULL) ) AS trx_3,
	
	COUNT(id_trx) AS jml_trx,
	SUM( nilai_trx ) AS total_trx
FROM tabel_sales
GROUP BY tim DESC, nama DESC
WITH ROLLUP

Hasil yang kita peroleh:

+------------+-----------+---------+-------+----------+-------+---------+-------+---------+-----------+
| nama_sales | sales_tim | januari | trx_1 | februari | trx_2 | maret   | trx_3 | jml_trx | total_trx |
+------------+-----------+---------+-------+----------+-------+---------+-------+---------+-----------+
| Delta      | 2         |       0 |     0 |  1000000 |     2 |  370000 |     1 |       3 |   1370000 |
| Charlie    | 2         |  850000 |     3 |   300000 |     1 |  725000 |     2 |       6 |   1875000 |
| SUB TOTAL  | 2         |  850000 |     3 |  1300000 |     3 | 1095000 |     3 |       9 |   3245000 |
| Bravo      | 1         |  310000 |     1 |   525000 |     2 |  450000 |     3 |       6 |   1285000 |
| Alfa       | 1         |  550000 |     2 |  1015000 |     3 |  375000 |     2 |       7 |   1940000 |
| SUB TOTAL  | 1         |  860000 |     3 |  1540000 |     5 |  825000 |     5 |      13 |   3225000 |
| SUB TOTAL  | TOTAL     | 1710000 |     6 |  2840000 |     8 | 1920000 |     8 |      22 |   6470000 |
+------------+-----------+---------+-------+----------+-------+---------+-------+---------+-----------+

Pada tabel diatas, data nama_sales dan sales_tim diurutkan secara  descending.

Cara ini merupakan cara yang paling mudah untuk mengubah urutan data, namun, pada MySQL versi 5.7, fitur ini sudah deprecated, artinya tidak disarankan untuk digunakan, karena, kedepan fitur ini akan dihapus.

Untuk itu disarankan untuk menggunakan eksplisit order dengan menggunakan klausa ORDER BY. Pada query yang mengandung klausa WITH ROLLUP, penggunaan klausa ORDER BY ini tidaklah mudah.

Hal ini karena kita harus mengatur nama dari kolom hasil klausa WITH ROLLUP sedemikian rupa sehingga berada di urutan paling bawah, perhatikan contoh berikut:

SELECT * FROM
(
	SELECT  
		IFNULL( nama, '1 - SUB TOTAL' ) AS nama_sales,
		IFNULL( tim, '0 - TOTAL' ) AS sales_tim,
		 
		SUM( IF( MONTH(tgl_trx) = 1, nilai_trx, 0) ) AS januari,
		COUNT( IF( MONTH(tgl_trx) = 1, id_trx, NULL) ) AS trx_1,
		SUM( IF( MONTH(tgl_trx) = 2, nilai_trx, 0) ) AS februari,
		COUNT( IF( MONTH(tgl_trx) = 2, nilai_trx, NULL) ) AS trx_2,
		SUM( IF( MONTH(tgl_trx) = 3, nilai_trx, 0) ) AS maret,
		COUNT( IF( MONTH(tgl_trx) = 3, nilai_trx, NULL) ) AS trx_3,
		
		COUNT(id_trx) AS jml_trx,
		SUM( nilai_trx ) AS total_trx
	FROM tabel_sales
	GROUP BY tim,  nama
	WITH ROLLUP
) AS tabel_sales
ORDER BY sales_tim DESC, nama_sales DESC

Hasil yang kita peroleh:

+---------------+-----------+---------+-------+----------+-------+---------+-------+---------+-----------+
| nama_sales    | sales_tim | januari | trx_1 | februari | trx_2 | maret   | trx_3 | jml_trx | total_trx |
+---------------+-----------+---------+-------+----------+-------+---------+-------+---------+-----------+
| Delta         | 2         |       0 |     0 |  1000000 |     2 |  370000 |     1 |       3 |   1370000 |
| Charlie       | 2         |  850000 |     3 |   300000 |     1 |  725000 |     2 |       6 |   1875000 |
| 1 - SUB TOTAL | 2         |  850000 |     3 |  1300000 |     3 | 1095000 |     3 |       9 |   3245000 |
| Bravo         | 1         |  310000 |     1 |   525000 |     2 |  450000 |     3 |       6 |   1285000 |
| Alfa          | 1         |  550000 |     2 |  1015000 |     3 |  375000 |     2 |       7 |   1940000 |
| 1 - SUB TOTAL | 1         |  860000 |     3 |  1540000 |     5 |  825000 |     5 |      13 |   3225000 |
| 1 - SUB TOTAL | 0 - TOTAL | 1710000 |     6 |  2840000 |     8 | 1920000 |     8 |      22 |   6470000 |
+---------------+-----------+---------+-------+----------+-------+---------+-------+---------+-----------+

Pada query diatas, dengan subquery kita buat tabel sementara yang sama persis dengan contoh sebelumnya, baru kemudian hasilnya kita urutkan berdasarkan kolom sales_tim, dan sales_nama.

Perhatikan bahwa pada query diatas, pada SUB TOTAL saya beri awalan angka 1, sehingga jika diurutkan secara descending akan berada di bawah, demikian juga untuk TOTAL pada kolom sales_tim.

Pembahasan tentang membuat total dan subtotal hal ini cukup panjang, sobat dapat mempelajarinya lebih jauh pada artikel:  Menghitung Total dan Subtotal Pada MySQL

IV. Pivot Table Dengan MySQL – Menambahkan Baris Total Dengan  Query Tersendiri

Pada contoh sebelumnya, kita dapat dengan mudah menambahkan baris total dan subtotal dengan klausa WITH ROLLUP, pada kondisi tertentu, kita tidak dapat mengandalkan klausa tersebut, misal ketika kita ingin  menampilkan data berdasarkan  kolom nilai_trx yang diurutkan secara descending

Jika kita menggunakan klausa WITH ROLLUP, maka baris TOTAL akan selalu  berada diatas, karena pasti jumlahnya paling besar.

Untuk mengatasi hal tersebut, kita dapat menambahkan baris TOTAL dengan query tersendiri, kemudian dengan UNION ALL, hasilnya kita gabung dengan query utama. Adapun querynya adalah:

SELECT * FROM (
	SELECT  
		nama,
		tim,
		 
		SUM( IF( MONTH(tgl_trx) = 1, nilai_trx, 0) ) AS januari,
		COUNT( IF( MONTH(tgl_trx) = 1, id_trx, NULL) ) AS trx_1,
		SUM( IF( MONTH(tgl_trx) = 2, nilai_trx, 0) ) AS februari,
		COUNT( IF( MONTH(tgl_trx) = 2, nilai_trx, NULL) ) AS trx_2,
		SUM( IF( MONTH(tgl_trx) = 3, nilai_trx, 0) ) AS maret,
		COUNT( IF( MONTH(tgl_trx) = 3, nilai_trx, NULL) ) AS trx_3,
		
		COUNT(id_trx) AS jml_trx,
		SUM( nilai_trx ) AS total_trx
	FROM tabel_sales
	GROUP BY tim,  nama
	ORDER BY total_trx DESC
) AS tabel_sales
UNION ALL
SELECT 'TOTAL' AS nama, '' AS tim, 
	SUM( IF( MONTH(tgl_trx) = 1, nilai_trx, 0) ) AS januari,
	COUNT( IF( MONTH(tgl_trx) = 1, id_trx, NULL) ) AS trx_1,
	SUM( IF( MONTH(tgl_trx) = 2, nilai_trx, 0) ) AS februari,
	COUNT( IF( MONTH(tgl_trx) = 2, nilai_trx, NULL) ) AS trx_2,
	SUM( IF( MONTH(tgl_trx) = 3, nilai_trx, 0) ) AS maret,
	COUNT( IF( MONTH(tgl_trx) = 3, nilai_trx, NULL) ) AS trx_3,
	COUNT(id_trx) AS jml_trx,
	SUM( nilai_trx ) AS total_trx
FROM tabel_sales

Hasil yang kita peroleh:

+---------+-----+---------+-------+----------+-------+---------+-------+---------+-----------+
| nama    | tim | januari | trx_1 | februari | trx_2 | maret   | trx_3 | jml_trx | total_trx |
+---------+-----+---------+-------+----------+-------+---------+-------+---------+-----------+
| Alfa    | 1   |  375000 |     2 |   815000 |     3 |       0 |     0 |       5 |   1190000 |
| Delta   | 2   |       0 |     0 |  1000000 |     2 |       0 |     0 |       2 |   1000000 |
| Bravo   | 1   |  310000 |     1 |   525000 |     2 |       0 |     0 |       3 |    835000 |
| Charlie | 2   |  525000 |     2 |   300000 |     1 |       0 |     0 |       3 |    825000 |
| TOTAL   |     | 1535000 |     6 |  2640000 |     8 | 2295000 |     8 |      22 |   6470000 |
+---------+-----+---------+-------+----------+-------+---------+-------+---------+-----------+

Perhatikan bahwa pada query diatas, kita letakkan query pertama pada subquery, hal ini dikarenakan ketika menggunakan UNION ALL, klausa ORDER BY harus berada di paling bawah, sehingga untuk mengurutkan data yang pertama, kita gunakan subquery.

V. Pivot Table Dinamis Dengan MySQL

Pada pembahasan diatas, jumlah kolom hasil pivot table sudah kita tentukan sebelumnya (statis). Hal tersebut pada banyak kondisi sudah cukup memadahi, namun, pada kondisi tertentu, jumlah kolom pada hasil pivot table  berubah ubah sesuai dengan jumlah baris.

Pada kondisi tersebut, maka query SQL nya juga ikut berubah ubah, sehingga penggunaan model statis tidak dapat digunakan lagi, untuk itu, kita dapat menggunakan model SQL yang dikenal dengan istilah pivot table dinamis. Pembahasan tentang hal ini dapat diikuti pada tutorial: Pivot Table Dinamis Dengan MySQL

VI. Penutup

Membuat pivot table dengan MySQL cukup mudah dilakukan, kendala utama dari proses ini adalah ketika ingin mengurutkan data yang didalamnya terdapat baris subtotal dan total yang dihasilkan oleh klausa WITH ROLLUP.

Hal ini disebabkan karena baris total dan subtotal tersebut ikut diurutkan, sehingga sangat besar kemungkinan baris tersebut akan berada di baris paling atas, sebagai alternatif, kita dapat membuat baris total menggunakan query tersendiri.

Jika sobat ingin membuat  pivot table menggunakan PHP, sobat dapat mengikuti tutorial:  Pivot Table Dengan PHP dan MySQL

Demikian pembahasan mengenai pivot table dengan MySQL, semoga bermanfaat.

Subscibe Now

Suka dengan artikel di Jagowebdev.com? jangan sampai ketinggalan, segera join ke milis kami untuk update informasi terbaru dari Jagowebdev.com

Komitmen Kami: Kami senantiasa menghargai privasi Anda dan tidak akan membagikan identitas Anda ke pihak manapun.

38 Feedback dari pembaca

    • Berarti SQL nya bersifat dinamis ya mas. Karena SQL bukanlah bahasa dinamis (tidak mengenal perulangan) maka untuk membuat SQL dinamis, kita perlu menempuh beberapa langkah. Singkatnnya, query jadiya adalah sebagai berikut:

      SET @sql_dinamis = (
      		SELECT
      			GROUP_CONCAT( DISTINCT
      				CONCAT('SUM( IF(MONTH(tgl_trx) = '
      					, MONTH(tgl_trx)
      					, ', nilai_trx, 0) ) AS bln_'
      					, MONTH(tgl_trx)
      				)
      			)
      		FROM tabel_sales
      	);
      SET @SQL = CONCAT('SELECT nama, ', 
      			  @sql_dinamis , ' 
      		   FROM tabel_sales
      	   	   GROUP BY nama
      		   WITH ROLLUP'
      	   );
      
      PREPARE stmt FROM @sql;
      EXECUTE stmt;

      Untuk penjelasan lebih lengkap, dapat dibaca pada tutorial: Pivot Table Dinamis Dengan MySQL

      • Salam buat mas Agus. saya mau tanya kalau punya tabel seperti

        +-------+-----------+-----------+------------+-------+
        | Nama  | Kelurahan | Kecamatan | Bidang     | honor |
        +-------+-----------+-----------+------------+-------+
        | Budi  | Bonai     | Kunta     | Keamanan   | 40000 |
        | Citra | Bonai     | Pulano    | Sekretaris | 50000 |
        | Dodi  | Bonai     | Pulano    | Sekretaris | 50000 |
        | Erni  | Koja      | Sentra    | Bendahar   | 30000 |
        | Ferdi | Koja      | Utaram    | Sekretaris | 40000 |
        | Gina  | Koja      | Sentra    | Staf       | 30000 |
        | Heru  | Koja      | Sentra    | Staf       | 30000 |
        | Irina | Koja      | Sentra    | Bendahara  | 30000 |
        | Jude  | Koja      | Utaram    | Sekretaris | 40000 |
        | Kindi | Koja      | Sentra    | Staf       | 30000 |
        | Linda | Koja      | Sentra    | Staf       | 30000 |
        +-------+-----------+-----------+------------+-------+

        Kalau pivot tabel MySQL yang hasilnya per Kecamatan seperti ini gimana?

        Misalnya Kecamatan Bonai

        +----------+-----+--------+----------+---------+----+-----+
        |Kelurahan |Sain |Keamanan|Sekretaris|Bendahara|Staf|Total|
        +----------+-----+--------+----------+---------+----+-----+
        |Kunta     |    1|       1|         0|        0|   0|    2|
        |Pulano    |    0|       0|         2|        0|   0|    2|
        |Total     |    1|       1|         2|        0|   0|    4|
        +----------+-----+--------+----------+---------+----+-----+

        Di Kecamatan Koja menjadi
        Misalnya Kecamatan Koja

        +----------+-----+--------+----------+---------+----+-----+
        |Kelurahan |Sain |Keamanan|Sekretaris|Bendahara|Staf|Total|
        +----------+-----+--------+----------+---------+----+-----+
        |Sentra    |    0|       0|         0|        2|   4|    6|
        |Utaram    |    0|       0|         2|        0|   0|    2|
        |Total     |    0|       0|         2|        2|   4|    8|
        +----------+-----+--------+----------+---------+----+-----+
        • Coba pakai query ini mas:

          SELECT  kelurahan,
          	COUNT(IF (bidang = 'sain', 1, NULL)) AS Sain,
          	COUNT(IF (bidang = 'keamanan', 1, NULL)) AS Keamanan,
          	COUNT(IF (bidang = 'sekretaris', 1, NULL)) AS Sekretaris,
          	COUNT(IF (bidang = 'bendahara', 1, NULL)) AS Bendahara,
          	COUNT(IF (bidang = 'staf', 1, NULL)) AS Staf,
          	
          	COUNT(IF (bidang = 'sain', 1, NULL))	
          	+ COUNT(IF (bidang = 'keamanan', 1, NULL))
          	+ COUNT(IF (bidang = 'sekretaris', 1, NULL))
          	+ COUNT(IF (bidang = 'bendahara', 1, NULL))
          	+ COUNT(IF (bidang = 'staf', 1, NULL))
          	AS total
          FROM kec
          WHERE kecamatan = 'Sentra'
          GROUP BY kecamatan;

          Hasil:

          +-----------+------+----------+------------+-----------+------+-------+
          | kelurahan | Sain | Keamanan | Sekretaris | Bendahara | Staf | total |
          +-----------+------+----------+------------+-----------+------+-------+
          | Koja      |    0 |        0 |          0 |         1 |    4 |     5 |
          +-----------+------+----------+------------+-----------+------+-------+

          Jika data bidang sifatnya dinamis, bisa digunakan teknik pivot table dinamis mas: Pivot Table Dinamis Dengan MySQL

  • salam mas agus..
    saya punya problem yg sama seperti ini modelnya mempivot table di MySql, saya sudah mencoba buat querynya namun tidak berhasil.

    saya mau mempivot dari view msv_inspeksi_x dan table image_temuan_inspeksi.

    untuk view msv_inspeksi_x seperti ini tampilannya :

    +----------+---------------+---------------+---------------+------+------------------+---------+-------------------------------------------+---------------------+-------+-------+---------------------+
    |unit_usaha|  id_inspeksi  | vc_no         | temuan        |resiko|jenis_temuan	     |vc_status|rekomendasi                                |kategori_pelanggaran |pic    |nama	 |due_date |tgl_selesai|
    +----------+---------------+---------------+---------------+------+------------------+---------+-------------------------------------------+---------------------+-------+-------+---------+-----------+
    |JB	   |IP201611000001 |IP2016110000011| Jalan Rusak   |HIGH  |KONDISI TIDAK AMAN|CLOSE    |Jalan harus diperbaiki dan di aspal ulang  |SOP	                 |1401345|AMELIA |2017-11-1|2017-4-1   |
    +----------+---------------+---------------+---------------+------+------------------+---------+-------------------------------------------+---------------------+-------+-------+---------------------+

    tampilannya disini berantakan mas jd ngga jelas gmn wujud tampilannya, karena panjang sekali datanya jd ngga muat dikolom komentar ini, mungkin bisa di copy paste ke notedpad tanpa format word wrap sekiranya bisa dilihat wujud tampilan viewnya hehehe..

    dan table image_inspeksi_temuan seperti ini;

    +---------------+--------------------------+-----------+------------+
    |unit_usaha     | no_id                    |   ket     |  gambar    |
    +---------------+--------------------------+-----------+------------+
    |JB	            |IP2016110000011|before    | (BLOB)    |
    +---------------+--------------------------+-----------+------------+
    |JB	            |IP2016110000011|after     | (BLOB)    |
    +---------------+--------------------------+-----------+------------+

    nah saya mau hasil query nya menjadi seperti ini ;

    +----------+---------------+---------------+---------------+------+------------------+---------+-------------------------------------------+---------------------+-------+-------+---------------------+------+------+
    |unit_usaha|  id_inspeksi  | vc_no         | temuan        |resiko|jenis_temuan	     |vc_status|rekomendasi                                |kategori_pelanggaran |pic    |nama	 |due_date |tgl_selesai|before| after|
    +----------+---------------+---------------+---------------+------+------------------+---------+-------------------------------------------+---------------------+-------+-------+---------+-----------+------+------+
    |JB	   |IP201611000001 |IP2016110000011    | Jalan Rusak   |HIGH  |KONDISI TIDAK AMAN|CLOSE    |Jalan harus diperbaiki dan di aspal ulang  |SOP	                 |1401345|AMELIA |2017-11-1|2017-4-1   |(BLOB)|(BLOB)|
    +----------+---------------+---------------+---------------+------+------------------+---------+-------------------------------------------+---------------------+-------+-------+---------------------+------+------+

    berantakan lagi tampilannya 😀 saya tidak bisa merapikannya dikolom komentar ini, mohon bantuannya mas..
    semoga berkenan.. terimakasih..

    • Untuk code panjang bisa menggunakan tag <pre> mbak. Untuk kasus diatas, coba gunakan JOIN mbak:

      SELECT mi.*, before, after
      FROM msv_inspeksi_x AS mi
      LEFT JOIN image_inspeksi_temuan ON mi.no_vc = image_inspeksi_temuan.no_id
  • tidak bisa di jalankan mas query nya, nama kolom before dan after di baca fungsi mas jadi saya ganti isi valuenya menjadi sebelum dan sesudah, namun ketika di jalankan dengan query seperti ini:

    SELECT mi.*, sebelum, sesudah
    FROM msv_inspeksi_x AS mi
    LEFT JOIN image_inspeksi_temuan ON mi.no_vc = image_inspeksi_temuan.no_id
    

    muncul error seperti ini mas:
    Unknown column ‘sebelum’ in ‘field list’

    kolom sebelum tidak di kenali mas..

    • Coba tetap menggunakan before dan after tetapi menggunakan backtick mbak:

      SELECT mi.*, `before`, `after`
      FROM msv_inspeksi_x AS mi
      LEFT JOIN image_inspeksi_temuan ON mi.no_vc = image_inspeksi_temuan.no_id

      Error: Unknown column ‘sebelum’ in ‘field list’ berarti kolom sebelum tidak ditemukan, bisa jadi kolom tersebut di tabel image_inspeksi_temuan tidak ada

  • mau nanya mas, saya punya contoh data seperti ini

    id_trx	nama	tgl_trx	       tim	nilai_trx
    1	Bravo	11/03/2016	1	425000
    2	Bravo	18/03/2016	1	250000
    3	Charlie	23/01/2016	2	350000
    4	Charlie	22/02/2016	2	300000
    5	Charlie	21/03/2016	2	275000
    

    pengen jdi seperti ini gan:

    id_trx	nama	tgl_trx	       tim	nilai_trx
    1	Bravo	11/03/2016	1	425000
    		18/03/2016	1	250000
    TOTAL				        675000
    3	Charlie	23/01/2016	2	350000
    		22/02/2016	2	300000
    		21/03/2016	2	275000
    TOTAL		                        925000
    
    • Untuk model seperti itu, setahu saya perlu menggunakan bahasa pemrograman struktural mas, seperti php, karena untuk memunculkan total, tidak bisa menggunakan WITH ROLLUP, karena tidak ada data yang di group

  • Permisi mas agus saya punya masalah pada saat run prepare stmt from @sql
    mohon dicek sql saya:

    SELECT * FROM tabel_nilai;
    SET @sql=NULL;
    ##2
    (SELECT GROUP_CONCAT(DISTINCT CONCAT('MAX(case when`nama`=''',tabel_nilai.nama,'''then nilai end) AS',tabel_nilai.nama) ORDER BY tabel_nilai.id ASC SEPARATOR',\n') INTO @sql FROM tabel_nilai);
    #3
    SET @sql=CONCAT('SELECT tabel_nilai.order, ', @sql, 'from tabel_nilai GROUP BY tabel_nilai.order');
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
    
  • mas saya mau tanya untuk query yang ini, kan munculnya hanya nama” bulanya,
    pertanyaanya, bagaimana kita bisa tahu bedanya kalo itu tahun misalnya 2017 atau 2018..?
    terimakasih mas mohon bantuanya
    SELECT nama,
    SUM( IF( MONTH(tgl_trx) = 1, nilai_trx, 0) ) AS januari,
    SUM( IF( MONTH(tgl_trx) = 2, nilai_trx, 0) ) AS februari,
    SUM( IF( MONTH(tgl_trx) = 3, nilai_trx, 0) ) AS maret,
    SUM( nilai_trx ) AS total_trx
    FROM tabel_sales
    GROUP BY nama

    • Oiya mas, maaf, karena dicontoh datanya hanya satu tahun. untuk mengambil hanya satu tahun, bisa ditambahkan klausa WHERE mas, misal:

      SELECT nama,
      SUM( IF( MONTH(tgl_trx) = 1, nilai_trx, 0) ) AS januari,
      SUM( IF( MONTH(tgl_trx) = 2, nilai_trx, 0) ) AS februari,
      SUM( IF( MONTH(tgl_trx) = 3, nilai_trx, 0) ) AS maret,
      SUM( nilai_trx ) AS total_trx
      FROM tabel_sales
      WHERE YEAR(tgl_trx) = 2017
      GROUP BY nama
  • Selamat pagi mas agus, mohon bantuanya saya punya tabel seperti ini hasil dari relasi 3 tabel, tbl_nilai, tbl_vendor dan tbl_kriteria

    +----------+-----------+-------------+-------+-----------+----------------------------+-------------+---------------------------+------+
    | id_nilai | id_vendor | id_kriteria | nilai | id_vendor | nama_vendor                | id_kriteria | nama_kriteria             | kode |
    +----------+-----------+-------------+-------+-----------+----------------------------+-------------+---------------------------+------+
    |        6 |        14 |           1 |     2 |        14 | PT. MITRA CAHAYA MUKTI     |           1 | Bidang Usaha Vendor       | C1   |
    |        7 |        14 |           2 |     2 |        14 | PT. MITRA CAHAYA MUKTI     |           2 | Spesifikasi Barang / Jasa | C2   |
    |        8 |        14 |           3 |     3 |        14 | PT. MITRA CAHAYA MUKTI     |           3 | Lama Pengiriman           | C3   |
    |        9 |        14 |           4 |     3 |        14 | PT. MITRA CAHAYA MUKTI     |           4 | Harga Barang              | C4   |
    |       10 |        14 |           5 |     3 |        14 | PT. MITRA CAHAYA MUKTI     |           5 | Diskon                    | C5   |
    |       11 |        15 |           1 |     4 |        15 | PT. POLYLINE TECHNOLOGIES  |           1 | Bidang Usaha Vendor       | C1   |
    |       12 |        15 |           2 |     3 |        15 | PT. POLYLINE TECHNOLOGIES  |           2 | Spesifikasi Barang / Jasa | C2   |
    |       13 |        15 |           3 |     2 |        15 | PT. POLYLINE TECHNOLOGIES  |           3 | Lama Pengiriman           | C3   |
    |       14 |        15 |           4 |     2 |        15 | PT. POLYLINE TECHNOLOGIES  |           4 | Harga Barang              | C4   |
    |       15 |        15 |           5 |     3 |        15 | PT. POLYLINE TECHNOLOGIES  |           5 | Diskon                    | C5   |
    |        1 |        16 |           1 |     3 |        16 | PT. KARYA ENERGI INDONESIA |           1 | Bidang Usaha Vendor       | C1   |
    |        2 |        16 |           2 |     3 |        16 | PT. KARYA ENERGI INDONESIA |           2 | Spesifikasi Barang / Jasa | C2   |
    |        3 |        16 |           3 |     3 |        16 | PT. KARYA ENERGI INDONESIA |           3 | Lama Pengiriman           | C3   |
    |        4 |        16 |           4 |     3 |        16 | PT. KARYA ENERGI INDONESIA |           4 | Harga Barang              | C4   |
    |        5 |        16 |           5 |     3 |        16 | PT. KARYA ENERGI INDONESIA |           5 | Diskon                    | C5   |
    +----------+-----------+-------------+-------+-----------+----------------------------+-------------+---------------------------+------+
    

    Hasil dari query SELECT nilai.id_nilai, nilai.id_vendor, nilai.id_kriteria, nilai.nilai, vendor.id_vendor, vendor.nama_vendor, kriteria.id_kriteria, kriteria.nama_kriteria, kriteria.kode FROM nilai JOIN vendor ON nilai.id_vendor = vendor.id_vendor JOIN kriteria ON kriteria.id_kriteria = nilai.id_kriteria

    saya mau tanya kalau pivot tabel MySQL yang saya mau tampilkan per nama kriteria seperti ini gimana ya?

    Misalnya seperti ini :

    +----------------------------+---------------------------+------+-------+
    | nama_vendor                | nama_kriteria             | kode | nilai |
    +----------------------------+---------------------------+------+-------+
    | PT. MITRA CAHAYA MUKTI     | Bidang Usaha Vendor       | C1   |     2 |
    | PT. MITRA CAHAYA MUKTI     | Spesifikasi Barang / Jasa | C2   |     2 |
    | PT. MITRA CAHAYA MUKTI     | Lama Pengiriman           | C3   |     3 |
    | PT. MITRA CAHAYA MUKTI     | Harga Barang              | C4   |     3 |
    | PT. MITRA CAHAYA MUKTI     | Diskon                    | C5   |     3 |
    | PT. POLYLINE TECHNOLOGIES  | Bidang Usaha Vendor       | C1   |     4 |
    | PT. POLYLINE TECHNOLOGIES  | Spesifikasi Barang / Jasa | C2   |     3 |
    | PT. POLYLINE TECHNOLOGIES  | Lama Pengiriman           | C3   |     2 |
    | PT. POLYLINE TECHNOLOGIES  | Harga Barang              | C4   |     2 |
    | PT. POLYLINE TECHNOLOGIES  | Diskon                    | C5   |     3 |
    | PT. KARYA ENERGI INDONESIA | Bidang Usaha Vendor       | C1   |     3 |
    | PT. KARYA ENERGI INDONESIA | Spesifikasi Barang / Jasa | C2   |     3 |
    | PT. KARYA ENERGI INDONESIA | Lama Pengiriman           | C3   |     3 |
    | PT. KARYA ENERGI INDONESIA | Harga Barang              | C4   |     3 |
    | PT. KARYA ENERGI INDONESIA | Diskon                    | C5   |     3 |
    +----------------------------+---------------------------+------+-------+
    

    Tetapi data dari kolom kriterianya dan nilai dijadikan kolom tersendiri urutaanya nanti berdasarkan nama vendor, kira” gimana ya mas query-nya?.. mohon bantuanya

    Terimakasih.

  • Selamat Malam Mas..
    saya mau minta tolong kalo tampilannya jadi gini gimana yas..
    +————————————————+——+——+——-+—–+——-+
    | nama_vendor | C1 | C2 | C3 | C4 | C5 |
    +————————————————+——+——+——-+—–+——-+
    | PT. MITRA CAHAYA MUKTI | 2 | 2 | 3 | 3 | 3 |
    | PT. POLYLINE TECHNOLOGIES | 4 | 3 | 2 | 2 | 3 |
    | PT. KARYA ENERGI INDONESIA | 3 | 3 | 3 | 3 | 3 |
    +————————————————+——+——+——+——+——-+
    terus satu lagi kalo II. Pivot Table Dengan MySQL tidak menggunakan sum gimana ya? jadi semua data tampil tapi tidak di sum.
    terimakasih sebelumnya…

  • Hallo mas, Selamat pagi mas agus.
    Mohon pencerahannya saya punya 2 table. 1: table_sdm
    +——+—————————+———————+
    | id | nama_sdm | jabatan |
    +——+—————————+———————+
    | 1 | AGUS PURWANTO | DIRUT |
    | 2 | ANDI SUBAGIO | BENDAHARA |
    +——+—————————+———————+
    dan table 2: table_absensi_sdm
    +——+————+——————+————————+————————+————————+
    | id | id_sdm | tgl_absen | jns_kehadiran | waktu_datang | waktu_pulang |
    +——+————+——————+————————+————————+————————+
    | 1 | 1 | 2020-03-01 | HADIR | 08:00 | 17:00 |
    | 1 | 2 | 2020-03-01 | IZIN | 08:00 | 17:00 |
    | 1 | 1 | 2020-03-02 | HADIR | 08:00 | 17:00 |
    | 1 | 2 | 2020-03-02 | HADIR | 08:00 | 17:00 |
    | 1 | 1 | 2020-03-03 | IZIN | 08:00 | 17:00 |
    +——+————+——————+————————+————————+————————+
    Lalu saya ingin membuat ouput seperti ini (satu, dua, tiga, Dst.. itu adalah Tgl tiap bulannya):
    +—————————+—————+—————+—————+—————+—————+—————+
    | nama_sdm | satu | dua | tiga | empat | lima | Dst… |
    +—————————+—————+—————+—————+—————+—————+—————+
    | AGUS PURWANTO | HADIR | HADIR | IZIN | null | null | null |
    | ANDI SUBAGIO | IZIN | HADIR | null | null | null | null |
    +—————————+—————+—————+—————+—————+—————+—————+

    Mohon penjelasan.a mas agus saya mentok disini mas.
    Terimakasih sebelumnya…

  • Assalamu’alaikum pak mau bertanya, kalau untuk operasi soal “Karyawan yang melayani pelanggan lebih dari 10 akan mendapat bonus gaji sebanyak 10000 dikali kelebihan jumlah pelanggan. Buat query untuk menpilkan bonus gaji yang diterima oleh karyawan

  • selamat pagi mas agus.

    mohon maaf mau tanya saya punya table spt ini
    _____________________________________
    |id | meta _key | meta_value |
    ______________________________________|
    |1 | 23 | AMMAR |
    |2 | 24 | SURABAYA |
    |3 | 25 | LAKI-LAKI |
    |4 | 26 | KAWIN |
    |5 | 27 | WIRASWASTA |
    |6 |28 | Jl. RAYA DARMO |

    ingin dijadikan spt ini

    _______________________________________________________________________________________________________________
    NAMA ALAMAT KELAMIN STATUS PEKERJAAN TMP BEKERJA
    _______________________________________________________________________________________________________________
    AMMAR SURABAYA LAKI-LAKI KAWIN WIRASWASTA JL. RAYA DARMO

    mohon bantuannya mas
    di phpmysql

    • Tabel nya cuman satu itu mas? kalau seperti itu hanya bisa dilihat dari kolom meta_key nya saja, misal:

      SELECT 	IF(meta_key = 23, meta_value, NULL) AS nama,
      	IF (meta_key = 24, meta_value, NULL) AS alamat
      FROM tabel
  • Selamat Sore Pak Agus,
    Mohon bantuannya,
    saya coba buat tabel absensi, isinya:
    nama | tanggal_absen | jam_masuk | jam_keluar
    fulan | 2021-04-01 | 08:00 | 16:00
    kary1 | 2021-04-01| 08:05 | 17:00

    bagaimana menampilkan data lewat PHP, bila header tabelnya adalah:
    nama | 1 | 2 | 3 | dst (dinamis, sesuai tanggal bulan berjalan)
    | M | P | M | P | dst (dinamis, sesuai data)
    fulan | 08:00 | 16:00 | dst (dinamis, sesuai data)
    kary1 | 08:05 | 17:00 |

    terima kasih atas bantuannya.

  • Siang mas minta tolong
    saya ada tabel sbb:
    +———————–+——–+
    | Scan_date(Timestamp) | pin
    +———————–+——–+
    | 2021-06-03 06:36:10 | 1230
    | 2021-06-03 14:37:54 | 1230
    | 2021-06-04 13:47:26 | 1230
    | 2021-06-04 21:09:27 | 1230
    | 2021-06-07 08:59:04 | 1230
    | 2021-06-07 09:03:04 | 1230
    | 2021-06-07 16:02:02 | 1230

    ingin outputnya seperti ini
    +——-+———————+———————+————–+
    | pin | Scan1 | Scan2 | Scan3
    +——-+———————+———————+————–+
    | 1230 | 2021-06-03 06:36:10 | 2021-06-03 14:37:54 |
    | 1230 | 2021-06-04 13:47:26 | 2021-06-04 21:09:27 |
    | 1230 | 2021-06-05 00:00:00 | 2021-06-05 00:00:00 |
    | 1230 | 2021-06-06 00:00:00 | 2021-06-06 00:00:00 |
    | 1230 | 2021-06-07 08:59:04 | 2021-06-07 09:03:04 | 2021-06-07 16:02:02

    bagaimana ya?

  • Siang Mas Agus, mohon infonya untuk mendapatkan nilai atau hasil seperti dibawah ini :
    ————————————————-
    ID | DETAIL | XDETAIL
    1 | A | B,C,D
    ————————————————-
    dari nilai yang sebelumnya adalah :
    ID | DETAIL
    1 | A
    1 | B
    1 | C
    1 | D
    2 | X
    2 | Y

  • Assalamualaikum, pak Agus. Gimana kabar?
    Saya mau tanya. saya mempunyai data seperti berikut.
    +——–+——-+————+———-+
    | idcard | inout | tgl | waktu |
    +——–+——-+————+———-+
    | 61 | 0 | 2020-09-26 | 06:50:09 |
    | 27 | 0 | 2020-09-26 | 07:44:47 |
    | 61 | 1 | 2020-09-26 | 13:06:36 |
    | 27 | 1 | 2020-09-26 | 15:07:39 |
    | 27 | 1 | 2020-09-26 | 15:12:56 |
    +——–+——-+————+———-+

    jadinya seperti ini:
    | idcard | tgl | in | out |
    | 61 | 2020-09-26 | 06:50:09 | 13:06:36 |
    | 27 | 2020-09-26 | 07:44:47 | 15:12:56 |

    0 = in, dan ambil yang paling kecil
    1 = out, dan ambil yang paling besar

    Terimakasih

  • Siang mas minta tolong
    Saya ada 2 tabel berikut. ingin hasil tabel sesuai yg paling bawah, mohon bantuanya
    DB : Unit
    |———————————————————————————-|
    | id | Supir | No Pol | samarinda | makasar | pontianak | banjarmasin |
    |———————————————————————————-|
    | U1 | Herman | B 123 KK | 10 | 5 |45 | 25 |
    | U2 | Budi | B 555 KLM | 20 | 25 |25 | 22 |
    | U3 | Santoso | B 675 PO | 35 | 30 |20 |10 |
    ———————————————————————————–
    DB : Bongkaran
    ——————————————————————————
    | id_bongkar | id | user | wilayah | unit | No Pol | Supir |
    ——————————————————————————
    | B1 | U1 | didi | samarinda | 10 | B 123 KK | Herman |
    | B2 | U1 | joko | makasar | 5 | B 123 KK | Herman |
    —————————————————————————–
    Hasil Yang Diinginkan

    |——————————————————————————————————————–|
    | id | Supir | No Pol | samarinda | makasar | pontianak | banjarmasin | u_srd | u_mks |u_ptk | u_bjm |
    |——————————————————————————————————————–|
    | U1 | Herman | B 123 KK | 10 | 5 |45 | 25 | didi | joko | null | null |
    | U2 | Budi | B 555 KLM | 20 | 25 |25 | 22 | null | null | null | null |
    | U3 | Santoso | B 675 PO | 35 | 30 |20 | 10 | null | null | null | null |
    ——————————————————————————————————————–|

Silakan tinggalkan komentar

Newsletter

Jadilah yang pertama tahu berita terbaru dari Jagowebdev.com