Sunday, November 27, 2011

Using Alias Select Statement as Where Clause

Sengaja menggunakan judul bahasa Inggris, karena menurut saya lebih mudah dicerna.
Intinya adalah "Bagaimana menggunakan Alias yang terdapat pada Select statement untuk Where clause"

Misal:
Select concat(FirstName, LastName) as FullName
from Employees
where FullName = 'Im Yoona'

Query diatas akan menimbulkan error, karena WHERE adalah T-SQL, WHERE clause selalu dieksekusi terlebih dahulu sebelum SELECT statement, sehingga alias FullName tidak akan terdefinisikan oleh WHERE clause.
Jika anda belum tahu/lupa dengan cara kerja garis besar query pada sql (untuk SELECT statement), bisa dilihat pada artikel :
How Select Statement Works

Ingat: pada SQL Server fungsi concat belum tentu ada, biasanya diganti dengan '+' (tanpa petik).
Hal tersebut mudah saja untuk diselesaikan, yaitu dengan menaruh formula concat(FirstName, LastName) = 'Im Yoona' pada WHERE clause.
Tetapi bagaimana jika formulanya kompleks seperti :
case when ctr.slrid =
 (select mbrcompany from CTRBOOK where ctrbook.CTRBOOKID = ctr.CTRBOOKID)
 then (select mbrshortname from jcmbr jc where MBRID = ctr.byrid)
 else (select mbrshortname from jcmbr jc where MBRID = ctr.slrid) end as 'counterparty'



Ada 2 cara:
1. Dengan melakukan aliasing table pada formula:

SELECT FullName
FROM  (
select concat(FirstName, LastName) as FullName
from Employees
) as sub
WHERE sub.FullName = 'Im Yoona'

2. Membuat View

CREATE VIEW dbo.EmployeesConcat
AS
    SELECT
        concat(FirstName,LastName) as FullName
        FROM Employees


-- maka sql statementnya menjadi lebih singkat
 
SELECT
    FullName
    FROM EmployeesConcat
    WHERE FullName = 'Im Yoona'


Untuk cara lainnya mungkin ada tapi belum dicari lagi, dan kiranya bisa kasih masukkan jika ada :)


Jika ada salah, mohon koreksinya :) Maksud hati hanya mao sharing yang saya tau kok :D

No comments:

Post a Comment