PDA

View Full Version : استخراج یک ستون از جدول در دستور Case از یک Query



Developer Programmer
یک شنبه 25 اردیبهشت 1390, 20:01 عصر
فرض کنین:
یک جدول دارین که بدهی نوع A رو نگه میداره.

A.ID
A.Name

یک جدول دارین که بدهی نوع B رو نگه میداره.

B.ID
B.Name


یک جدول C دارید که نتیجه بدهی A یا B رو در خودش نگه میداره و با فیلدی مثل Type مشخص میکنه بدهی نوع A بوده یا B

C.ID
C.ForeignKey
C.Type
c.Name


الان میخواین یکسری اطلاعات از جدول C رو نشون بدید و علاوه بر اون بر اساس فیلد Type تصمیم بگیرین که کدام فیلد رو از جداول A یا B استخراج کنین.

چیزی شبیه این:


Select C.ID,C.Name, 'SomeThing'=Case C.Type
when 0 then Select A.Name from A
when 1 then Select B.Name from B
end


چیکار باید بکنین؟

محمد سلیم آبادی
یک شنبه 25 اردیبهشت 1390, 20:06 عصر
اینو امتحان کن:

select C.*, d.name
from (select id, name, 0 f from TableA
union
select id, name, 1 from TableB) D
join TableC C
on D.id = C.id and D.f = C.type;

m_omrani
دوشنبه 26 اردیبهشت 1390, 09:31 صبح
فکر کنم با این کوئری هم بشه:

select * from
(
select
C.ID,
C.Name,
A.Name as AName,
B.Name as BName
from C
left join A on C.ForeignKey = A.ID AND C.Type = 0
left join B on C.ForeignKey = B.ID AND C.Type = 1
) q
where q.AName is not null and q.BName is not null

محمد سلیم آبادی
دوشنبه 26 اردیبهشت 1390, 17:17 عصر
برای روش پست قبلی برای مرج کردن داده های Null با داده های اصلی از یکی از دو تابع isnullو coalesce استفاده شود