في SQLServer، تحتاج إلى تحديد أحد أعماليين، هل يمكن أن يفعله إصدار الحالة هذا؟

StackOverflow https://stackoverflow.com/questions/1691690

سؤال

طاولتي:

المستخدمين (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 هي أنواع مختلفة، فستحتاج إلى استخدام المصبوب أو تحويلها لتحويل واحد إلى آخر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top