PDA

View Full Version : اسم ستون با استفاده از مقدار یک فیلد



silverfox
چهارشنبه 09 اسفند 1391, 11:41 صبح
سلام
من یه جدول PC دارم که توش یه سری قطعات کامپیوتر هست، مادربورد هارد و اینا
یه جدول دیگه دارم PC_Parts که توش قطعات اضافی هست مثلا رم ریدر و اینجور چیزا
توی جدول PC دارم مثلا
ID=1
Motherboard=GIGA
HDD=Western
بعد توی PC_Parts دارم
PC_ID=1
Name=RamReader
Value=Sony

PC_ID=1
Name=Modem
Value=SomeBrand

حالا می خوام خروجی اینطوری داشته باشم که
ID Motherboard HDD RamReader Modem
1 GIGA Western Sony SomeBrand

یعنی برای هر ID که مال هر PC هست شکل جدولم فرق می کنه حالا چی کارش باید بکنم؟

محمد سلیم آبادی
چهارشنبه 09 اسفند 1391, 12:00 عصر
اینو امتحان کنین:
select ID, motherboard, HDD,
D.ramreaser, D.modem
from PC
inner join
(
select
PC_ID,
max(case when name = ramreader then value end) as RamReader,
max(case when name = modem then value end) as Modem
from PC_Parts
group by PC_ID
)d
on ID = d.PC_ID;

silverfox
چهارشنبه 09 اسفند 1391, 15:00 عصر
الان من واسه یه کامپیوتر ممکنه ramreader داشته باشم واسه یکی دیگه مودم واسه یکی دیگه یه چیز دیگه یعنی خود اینا ثابت نیستند، برای هر کدوم اول باید بخونم از جدول pc_parts بعد یه query مثل اینی که نوشتین برای هر کدوم ایجاد کنم و execute کنم؟

محمد سلیم آبادی
پنج شنبه 10 اسفند 1391, 08:33 صبح
اگر قطعات جانبی فرد مورد نظر الحاق بشن مشکلی بوجود میاد
declare @d table (id int)
insert @d values (1),(2)

declare @t table
(pc_id int, name varchar(15), value varchar(15))

insert @t
values (1, 'ramreader', 'sony'),
(1, 'modem', 'someBrand'),
(2, 'other', 'otherBrand');

select d.id, stuff(t.list, 1, 1, '') list
from @d d
cross apply
(
select ', '+name+': '+value
from @t
where pc_id = d.id
for xml path('')
)t(list)

--- The Result
/*
id list
----------- -------------------------------------
1 ramreader: sony, modem: someBrand
2 other: otherBrand
*/