دوست عزیز این اسکریپت ها که فرستادی اصلا ربطی به درخواستی که در اولین پست دارید، ندارن ...
در هر حال برای اجرای درخواست شما طبق تصویر زیر...
query.png
می تونید از اسکریپت زیر که یک Store Procedure هست استفاده کنید چون خواسته شما کمی پیچیده است از این روش استفاده کردم
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE getRecords
AS
BEGIN
SET NOCOUNT ON;
DECLARE @SqlStatement1 [nvarchar](500),
@SqlStatement2 [nvarchar](500),
@SqlStatement3 [nvarchar](500),
@Code [char] (5),
@Counter int = 0,
@CONSTROW int = (SELECT COUNT(*) as cnt
FROM STOPDB.dbo.kala INNER JOIN STOPDB.dbo.sazandeh ON STOPDB.dbo.kala.codekala = STOPDB.dbo.sazandeh.codekala)
IF OBJECT_ID(N'STOPDB.dbo.tmp', N'U') IS NOT NULL
DROP TABLE tmp
CREATE TABLE [dbo].[tmp](
[codekala] [int] NULL,
[namekala] [nchar](10) NULL,
[namesazandeh1] [nchar](10) NULL,
[address1] [nchar](10) NULL,
[tel1] [nchar](10) NULL
) ON [PRIMARY]
DECLARE temp CURSOR FOR
SELECT CAST(dbo.sazandeh.code AS char(5)) AS code
FROM dbo.kala INNER JOIN dbo.sazandeh ON dbo.kala.codekala = dbo.sazandeh.codekala
OPEN temp
FETCH NEXT FROM temp
INTO @Code
WHILE (@@FETCH_STATUS = 0)
BEGIN
IF @Code = 1
BEGIN
SET @SqlStatement1=' INSERT INTO [STOPDB].[dbo].[tmp]
(codekala,namekala,namesazandeh'+@Code+',address'+ @Code+',tel'+@Code+')
SELECT dbo.kala.codekala, dbo.kala.namekala, dbo.sazandeh.namesazandeh, dbo.sazandeh.tel, dbo.sazandeh.address
FROM dbo.kala INNER JOIN dbo.sazandeh ON dbo.kala.codekala = dbo.sazandeh.codekala
WHERE (dbo.sazandeh.code = '+@Code+')'
EXECUTE sp_executesql @SqlStatement1
SET @Counter = @Counter + 1
END
ELSE
BEGIN
SET @SqlStatement3=' UPDATE STOPDB.dbo.tmp
SET dbo.tmp.namesazandeh'+@Code+' = dbo.sazandeh.namesazandeh,
dbo.tmp.tel'+@Code+' = dbo.sazandeh.tel,
dbo.tmp.address'+@Code+' = dbo.sazandeh.address
FROM dbo.kala INNER JOIN dbo.sazandeh ON dbo.kala.codekala = dbo.sazandeh.codekala
WHERE (dbo.sazandeh.code = '+@Code+')'
EXECUTE sp_executesql @SqlStatement3
SET @Counter = @Counter + 1
END
FETCH NEXT FROM temp
INTO @Code
IF @Counter != @CONSTROW
BEGIN
SET @SqlStatement2=' ALTER TABLE [STOPDB].[dbo].[tmp] ADD namesazandeh'+@Code+' nchar(10) NULL,
address'+@Code+' nchar(10) NULL,
tel'+@Code+' nchar(10) NULL'
EXECUTE sp_executesql @SqlStatement2
END
END
CLOSE temp
DEALLOCATE temp
END
EXECUTE STOPDB.dbo.getRecords
SELECT TOP 1000 * FROM [STOPDB].[dbo].[tmp]
کافی این اسکریپت اجرا کنید تا ساخته بشه و در آخر خروجی که می خواهید به شما نمایش میده.
البته اگر بخواهید که از این کوئری برای جداولی که تعداد رکوردهای زیادی دارن استفاد ه کنید حتما باید بهینه بشن چون من فقط قصدم آموزش این مطلب بود خیلی روی Query Plan های این اسکریپت کار نکردم