نوشته شده توسط
reza4359
ممنونم مهندس رحیمی از راهنمایی شما
چطوری اجتماع شماره ها را که داخل یک فیلد هست را از هم تفکیک کنم ؟
ماکزیمم شماره ها هم معلومه حداکثر 10 شماره تلفن
بازم ممنون از وقتی که گذاشتید
دوستان در مورد دیتاتیبل توضیح میدن ، من دیگه وارد نمیشم.
اما در مورد pivot ؛ چون حداکثر برای تعداد تلفن ها تعیین کردید با یک pivot قابل حل هست.(اگر تعداد تلفن ها حداکثر نداشته باشه یا تعداد زیاد باشه ، کوئری زیر جوابگو نیست)
اگر جدول تلفن ها رو به صورت زیر فرض کنیم:
CREATE TABLE [dbo].[Telephone](
[id] [int] IDENTITY(1,1) NOT NULL,
[personId] [int] NULL,
[phoneNumber] [varchar](50) NULL,
CONSTRAINT [PK_Telephone] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
کوئری زیر جواب شماست
declare @t as TABLE( id int , personid int , phone varchar(max) , rownumber bigint);
insert into @t
select
*,
ROW_NUMBER() over (PARTITION by personid order by id asc) as rownumber
from telephone
select
ttt.personid,
max([1]) ,
max([2]) ,
max([3]) ,
max([4]) ,
max([5]) ,
max([6]) ,
max([7]) ,
max([8]) ,
max([9]) ,
max([10])
from
(
select
pppp.personid, [1] , [2] , [3] , [4] , [5] , [6] , [7] , [8] , [9] , [10]
from @t
pivot
(
max(phone)
for rownumber
in([1] , [2] , [3] , [4] , [5] , [6] , [7] , [8] , [9] , [10])
) as pppp
) ttt
group by personid
خروجی رو میتونید با جدول اشخاص join کنید. اگر هم نمیتونید جدولها رو تفکیک کنید، کافیه قسمت کوئری بالا رو اصلاح کنید.