Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Kesalahan SQL Server 2005 saat mengelompokkan menggunakan subquery

Untuk memulai, jika kita memberikan kesalahan penuh, seharusnya terbaca "Setiap ekspresi GROUP BY harus berisi setidaknya satu kolom yang bukan referensi luar. "

Untuk memahami kesalahan, kita perlu mengklarifikasi apa yang dimaksud dengan 'referensi luar'

(Catatan:dalam hal ini tidak ada hubungannya dengan gabungan dalam atau luar)

bagian dalam dan luar mengacu pada kueri utama dan subkuerinya. Dalam hal ini EXISTS adalah subquery dan merupakan berkorelasi subquery karena memiliki referensi luar #header.header , yang merujuk ke tabel luar #header , sedangkan referensi apa pun ke #detail akan dianggap sebagai referensi batin.

Jadi intinya, karena CASE menggunakan subkueri berkorelasi yang mereferensikan kueri luar, lalu mengaktifkan status kesalahan, karena pesan kesalahan ini muncul saat Anda mencoba hanya menggunakan ekspresi dalam klausa GROUP BY yang ditafsirkan sebagai referensi luar.

Subkueri bisa digunakan di GROUP BY, tetapi bukan subkueri yang berkorelasi.

Yang membingungkan, kesalahan yang sama dapat dihasilkan oleh kueri yang tidak disubkueri dan lebih sederhana seperti

select 
 case when header=1 then 1 
      else 0 
 end headeris1, 
 'constant' 
from #header 
group by case when header=1 then 1 else 0 end , 'constant'

atau bahkan mengganti konstanta dengan @variable

Bening seperti lumpur?

Kev



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Query untuk mengambil angka dalam langkah-langkah tertentu di antara rentang

  2. Batasan ekspresi reguler SQL Server

  3. Nilai kolom pivot dinamis MSSQL ke header kolom

  4. Alat Data SQL Server Visual Studio 2015 tidak ada opsi Tambahkan Tabel

  5. Cara Mendapatkan Nilai Kolom Identitas tanpa Menyebutkan Nama Kolom Identitas di Pilih - Tutorial SQL Server / T-SQL Part 46