অর্ডার বাই ব্যতীত আপনি একটি উপন্যাসটি রেফারেন্স করতে পারবেন না কারণ নির্বাচন দ্বিতীয় শ্রেণীর যেটি মূল্যায়ন করা হয় তা বেছে নিন। দুটি কর্মক্ষেত্র:
SELECT BalanceDue FROM (
SELECT (InvoiceTotal - PaymentTotal - CreditTotal) AS BalanceDue
FROM Invoices
) AS x
WHERE BalanceDue > 0;
বা কেবল প্রকাশটি পুনরাবৃত্তি করুন:
SELECT (InvoiceTotal - PaymentTotal - CreditTotal) AS BalanceDue
FROM Invoices
WHERE (InvoiceTotal - PaymentTotal - CreditTotal) > 0;
আমি উত্তরোত্তর পছন্দ। যদি অভিব্যক্তিটি অত্যন্ত জটিল (বা গণনা করার জন্য ব্যয়বহুল) হয় তবে আপনার পরিবর্তে সম্ভবত একটি গণিত কলামটি বিবেচনা করা উচিত (এবং সম্ভবত অবিরত থাকবে), বিশেষত যদি অনেকগুলি প্রশ্ন এই একই অভিব্যক্তির উল্লেখ করে।
পিএস আপনার ভয় ভিত্তিহীন বলে মনে হচ্ছে। অন্তত এই সাধারণ উদাহরণে, এসকিউএল সার্ভার কেবল একবার গণনা সম্পাদন করার জন্য যথেষ্ট স্মার্ট, যদিও আপনি এটি দুবার উল্লেখ করেছেন। এগিয়ে যান এবং পরিকল্পনা তুলনা; আপনি দেখতে পাবেন তারা অভিন্ন। আপনার যদি আরও জটিল কেস হয় যেখানে আপনি একাধিকবার ভাব প্রকাশের মূল্যায়ন দেখতে পান তবে দয়া করে আরও জটিল প্রশ্ন এবং পরিকল্পনা পোস্ট করুন।
এখানে 5 টি উদাহরণস্বরূপ ক্যোয়ারী রয়েছে যা সমস্ত একই কার্যকর প্রয়োগের পরিকল্পনা করে:
SELECT LEN(name) + column_id AS x
FROM sys.all_columns
WHERE LEN(name) + column_id > 30;
SELECT x FROM (
SELECT LEN(name) + column_id AS x
FROM sys.all_columns
) AS x
WHERE x > 30;
SELECT LEN(name) + column_id AS x
FROM sys.all_columns
WHERE column_id + LEN(name) > 30;
SELECT name, column_id, x FROM (
SELECT name, column_id, LEN(name) + column_id AS x
FROM sys.all_columns
) AS x
WHERE x > 30;
SELECT name, column_id, x FROM (
SELECT name, column_id, LEN(name) + column_id AS x
FROM sys.all_columns
) AS x
WHERE LEN(name) + column_id > 30;
পাঁচটি প্রশ্নের জন্য ফলাফল তৈরির ফলাফল: