আমি এমন একটি ইস্যুতে চলে এসেছি যেখানে CASE
আমি যা প্রত্যাশা করি তা কোনও অভিব্যক্তি ফিরে আসে না।
পরীক্ষা হিসাবে, আমি একটি দশমিক পরিবর্তনশীল যুক্ত করেছি এবং এর CASE
বিরুদ্ধে একই অভিব্যক্তিটি চালিয়েছিলাম এবং এটি দুর্দান্ত কাজ করে, ফলাফলটি প্রত্যাশা মতো প্রত্যাবর্তন করে (যখন মানটি চার্জ করে নেওয়া হয় IsGun=1
same তবে আমি যখন একই CASE
দশমিক মানটিকে অন্য দশমিক মানের বিপরীতে চালিত করি , এটি সর্বদা ফিরে আসে CEILING()
ফাংশন সহ মানটি এবং আসল মানটি আর দেয় না।
এসকিউএল কোডটি এখানে:
DECLARE @Num decimal(8,2);
set @Num = 12.54;
WITH PQ AS
(
SELECT
UPC,
Price1,
DBID,
AVG(Price1) OVER (PARTITION BY UPC) AS Price1Avg
FROM
vProducts_PriceQty_Union
)
SELECT
PQ.UPC,
PQ.Price1,
PQ.Price1Avg,
(CASE WHEN p.IsGun = 1 THEN CEILING(@Num) ELSE @Num END) AS UsingVar,
CAST(
(CASE WHEN P.IsGun = 1 THEN CEILING(PQ.Price1Avg) ELSE PQ.Price1 END)
AS NUMERIC(8,2))
AS PriceAdj,
PQ.DBID,
P.IsGun
FROM
PQ
INNER JOIN
products P ON PQ.UPC = P.UPC
এখানে ফলাফলগুলির একটি স্নিপেট রয়েছে:
UPC Price1 Price1Avg UsingVar PriceAdj DBID IsGun
942000899195 14.9900 14.990000 12.54 15.00 1 0
980420671300 29.9900 29.990000 12.54 30.00 1 0
980420671310 29.9900 29.990000 12.54 30.00 1 0
980426713020 29.9900 29.990000 12.54 30.00 1 0
980426713120 29.9900 29.990000 12.54 30.00 1 0
000998622130 319.0000 319.000000 13.00 319.00 1 1
000998624730 314.0000 314.000000 13.00 314.00 1 1
000998624970 419.0000 419.000000 13.00 419.00 1 1
008244284754 1015.0000 1015.000000 13.00 1015.00 2 1
010633012288 267.0000 267.000000 13.00 267.00 6 1
এবং vProducts_PriceQty_Union থেকে আসে ডেটা এখানে :
UPC Price1 Price2 Quantity DBID
942000899195 14.9900 0.0000 2.00 1
980420671300 29.9900 0.0000 3.00 1
980420671310 29.9900 0.0000 1.00 1
980426713020 29.9900 0.0000 2.00 1
980426713120 29.9900 0.0000 1.00 1
আপনি প্রথম পাঁচটি থেকে দেখতে পাচ্ছেন, যেখানে ইসগান = 0, প্রথম CASE
পরিবর্তনটি স্থির ভেরিয়েবলটি ব্যবহার করে ইউজিংভার মানটি প্রত্যাশা হিসাবে প্রত্যাশা করে, 12.54। এবং শেষ পাঁচটির জন্য, এটি আমাদের প্রত্যাশিত মানটিও ফেরত দেয়, 13।
তবে দ্বিতীয় CASE
অভিব্যক্তিতে (ঠিক একই যুক্তি দিয়ে), প্রাইসএডজেCEILING
তাদের প্রত্যেকেরই ফাংশনটি ব্যবহার করে, ইসগান = 1 থাকুক না কেন।
কোয়েরি কেন প্রত্যাশিত ফলাফল প্রত্যাবর্তন করছে না?
ইউনিয়ন দেখার জন্য ব্যবহৃত কয়েকটি সারণীতে প্রাইস 1 এবং মূল্য 2 এর ডেটা টাইপগুলি ছিল ছোট ছোট এবং দশমিক (8,2) । আমি তখন থেকে তাদের সকলকে দশমিক (8,2) হিসাবে পরিবর্তন করেছি , তবে এটি ফলাফলগুলিতে প্রভাব ফেলেনি।