Memahami Kesalahan “Nama Kolom Tidak Valid” dalam SQL

Saat bekerja dengan SQL Server dan mengkueri data dari server SSAS yang terhubung, Anda mungkin menemui kesalahan yang cukup menjengkelkan: “Nama kolom tidak valid ‘Value’”. Masalah ini sering muncul ketika mencoba memfilter hasil menggunakan alias di klausa WHERE pada pernyataan SQL Anda. Dalam postingan blog ini, kita akan membahas masalah ini secara detail dan memberikan solusi yang sederhana untuk membantu Anda mengatasinya.

Penjelasan Masalah

Dalam kueri SQL awal Anda, semua tampak berfungsi dengan baik:

SELECT "Ugly OLAP name" as "Value" 
FROM OpenQuery(OLAP, 'OLAP Query')

Namun, menambahkan klausa WHERE untuk memfilter nilai yang lebih besar dari nol seperti ini:

WHERE "Value" > 0

mengarah pada kesalahan:

Nama kolom tidak valid ‘Value’

Kesalahan ini terjadi karena urutan evaluasi di SQL Server, yang berbeda dari urutan di mana Anda mungkin menulis kueri. Memahami urutan ini sangat penting untuk menghindari kesalahan semacam itu.

Urutan Pemrosesan Kueri SQL

SQL Server memproses kueri dalam urutan tertentu terlepas dari bagaimana formatnya. Berikut adalah urutannya:

  1. FROM: menentukan tabel atau tampilan sumber.
  2. ON: kondisi penggabungan.
  3. JOIN: menggabungkan tabel.
  4. WHERE: memfilter baris berdasarkan kriteria.
  5. GROUP BY: mengatur baris dalam grup.
  6. HAVING: memfilter grup.
  7. SELECT: memilih kolom untuk dikembalikan.
  8. ORDER BY: mengurutkan hasil.

Sesuai dengan urutan ini, mesin SQL memproses klausa WHERE sebelum mengevaluasi baris SELECT, yang berarti alias “Value” belum dikenali saat kondisi diperiksa.

Solusi

Untuk mengatasi keterbatasan ini, Anda dapat membuat tampilan inline (juga dikenal sebagai tabel turunan). Metode ini memungkinkan Anda untuk mengenkapsulasi kueri asli, sehingga alias dapat diperlakukan sebagai nama kolom yang valid di klausa selanjutnya. Berikut adalah cara Anda dapat melakukannya:

SELECT A.Value
FROM (
    SELECT "Ugly OLAP name" as "Value"
    FROM OpenQuery(OLAP, 'OLAP Query')
) AS A
WHERE A.Value > 0

Rincian Solusi

  • Pembuatan Tampilan Inline: Pernyataan SELECT dibungkus dalam tanda kurung dan diberikan alias (dalam hal ini, AS A). Tampilan ini diperlakukan sebagai “tabel” baru.
  • Mengacu pada Alias: Sekarang, karena Value adalah kolom yang valid dalam konteks tampilan inline, Anda dapat dengan aman menggunakannya di klausa WHERE Anda.

Kesimpulan

Memahami cara SQL Server memproses kueri di tingkat mendasar dapat menghemat banyak waktu Anda saat melakukan debug kesalahan seperti masalah “Nama kolom tidak valid”. Dengan menggunakan tampilan inline, Anda menciptakan struktur logis di mana SQL mengetahui apa yang harus dirujuk selama fase pemrosesan klausa WHERE.

Jika Anda mengalami masalah serupa saat bekerja dengan kueri SQL, ingatlah untuk memperhatikan urutan evaluasi dan gunakan tampilan inline jika diperlukan untuk struktur kueri yang lebih bersih dan lebih efektif.

Sekarang Anda siap untuk menghadapi kueri SQL Anda dengan percaya diri!