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

Mengapa saya tidak bisa merujuk ke alias kolom di ORDER BY menggunakan CASE?

Ini berkaitan dengan bagaimana dbms SQL menyelesaikan nama yang ambigu.

Saya belum melacak perilaku ini dalam standar SQL, tetapi tampaknya konsisten di seluruh platform. Inilah yang terjadi.

create table test (
  col_1 integer,
  col_2 integer
);

insert into test (col_1, col_2) values 
(1, 3), 
(2, 2), 
(3, 1);

Alias ​​​​"col_1" sebagai "col_2", dan gunakan alias dalam klausa ORDER BY. Dbms menyelesaikan "col_2" di ORDER BY sebagai alias untuk "col_1", dan mengurutkan berdasarkan nilai dalam "test"."col_1".

select col_1 as col_2
from test
order by col_2;
col_2
--
1
2
3

Sekali lagi, alias "col_1" sebagai "col_2", tetapi gunakan ekspresi dalam klausa ORDER BY. Dbms menyelesaikan "col_2" tidak sebagai alias untuk "col_1", tetapi sebagai kolom "test"."col_2". Ini mengurutkan berdasarkan nilai dalam "test"."col_2".

select col_1 as col_2
from test
order by (col_2 || '');
col_2
--
3
2
1

Jadi dalam kasus Anda, kueri Anda gagal karena dbms ingin menyelesaikan "Nilai Baru" dalam ekspresi sebagai nama kolom di tabel dasar. Tapi itu tidak; ini adalah alias kolom.

PostgreSQL

Perilaku ini didokumentasikan di PostgreSQL di bagian Mengurutkan Baris . Alasan mereka menyatakan adalah untuk mengurangi ambiguitas.

SELECT a + b AS sum, c FROM table1 ORDER BY sum + c;          -- wrong

Kesalahan dokumentasi di SQL Server 2008

Sebuah sedikit masalah yang berbeda sehubungan dengan alias dalam ORDER klausa BY .

Kecuali saya tidak cukup berkafein, itu tidak benar sama sekali. Pernyataan ini diurutkan berdasarkan "test"."col_1" di SQL Server 2008 dan SQL Server 2012.

select col_1 as col_2
from test
order by col_1;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Replikasi Sql Server memerlukan nama server yang sebenarnya untuk membuat koneksi ke server

  2. Apa cara terbaik untuk menerapkan Asosiasi Polimorfik di SQL Server?

  3. Apa gunanya SINONIM?

  4. perlu mendapatkan data yang dikelompokkan berdasarkan groupid

  5. SQL Server, Mengonversi NTEXT ke NVARCHAR(MAX)