في SQLServer، تحتاج إلى تحديد أحد أعماليين، هل يمكن أن يفعله إصدار الحالة هذا؟
-
18-09-2019 - |
سؤال
طاولتي:
المستخدمين (userid، col1، col2)
أريد إجراء إجراء مخزن عام، لكنني بحاجة إلى إرجاع إما COL1 أو COL2 في استعلام.
هل يمكنني التعامل مع بيان الحالة هذا الموقف؟
حدد معرف المستخدم، Col1 من المستخدمين
أو
حدد معرف المستخدم، COL2 من المستخدمين
المحلول
باستخدام الحالة:
SELECT t.userid,
CASE
WHEN [something to evaluate why to show col1 vs col2 ] THEN
t.col1
ELSE
t.col2
END
FROM USERS t
باستخدام Coalesce:
SELECT t.userid,
COALESCE(t.col1, t.col2)
FROM USERS t
إرجاع Coalesce قيمة العمود الأول التي ليست فارغة، بدءا من اليسار.
نصائح أخرى
نعم، طالما أنك لا تمانع في إعادة أسماء الأعمدة نفسها:
SELECT userID, ArbitraryCol = CASE WHEN @param = 1 then col1 ELSE col2 END
FROM Users
إذا كنت بحاجة إلى تغيير رؤوس الأعمدة، فعليك استخدام بيان IF
IF @param = 1
BEGIN
SELECT userID, col1 FROM Users
END
ELSE
BEGIN
SELECT userID, col2 FROM Users
END
أعتقد أن SQL Server 2000/2005 شيء مثل هذا.
select
UserID,
case UserID
when 1 then Col1
when 2 then Col2
else 'boo'
end as SpecialSituation
from
Users
يمكن، على افتراض أن لديك تعبير منطقي عن وقت إعادة كول 1 بدلا من COL2:
SELECT USERID CASE WHEN USERTYPE='X' THEN COL1 ELSE COL2 END FROM USERS
إذا كانت col1 و col2 هي أنواع مختلفة، فستحتاج إلى استخدام المصبوب أو تحويلها لتحويل واحد إلى آخر.
لا تنتمي إلى StackOverflow