نمایش نتایج 1 تا 12 از 12

نام تاپیک: کمک برای نوشتن کوئری

Hybrid View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #1

    کمک برای نوشتن کوئری

    سلام
    سوالمو بصورت یک مثال مطرح میکنم
    فرض کنید یک جدول دارای 5 ستون هر رکورد دارای 2 فیلد ثابت و 3 فیلد متغیر
    مثلا کد و نام یک کالا که توسط شرکت های مختلف ساخته میشه. (نام شرکت، ادرس، تلفن)
    شکل جدول به این صورته که اگه 4 شرکت سازنده وجود داشته باشه چهار رکورد با فیلد اول و دوم کد و نام کالا و سه فیلد مشخصات سازنده وجود دارد
    1.jpg
    من میخوام کوئری داشته باشم که تمام این مشخصات رو در یک سطر نمایش بده
    برای این مثال دو فیلد مشخصات کالا و چهارتا فیلد سه تایی مشخصات سازنده در یک رکورد 14 فیلدی نمایش بده
    2.jpg
    و البته این تعداد رکورد پویا هستش هر کالایی ممکنه تعداد سازنده مختلفی داشته باشه

  2. #2

    نقل قول: کمک برای نوشتن کوئری


  3. #3

    نقل قول: کمک برای نوشتن کوئری

    کسی نمیتونه به من کمک کنه؟؟؟

  4. #4

    نقل قول: کمک برای نوشتن کوئری

    نقل قول نوشته شده توسط mehdi0020 مشاهده تاپیک
    کسی نمیتونه به من کمک کنه؟؟؟
    اسکریپت بانکهاتون را اینجا قرار بدید تا بتونیم کمک کنیم....

  5. #5

    نقل قول: کمک برای نوشتن کوئری

    نقل قول نوشته شده توسط farhad_shiri_ex مشاهده تاپیک
    اسکریپت بانکهاتون را اینجا قرار بدید تا بتونیم کمک کنیم....
    هنوز هیچ چیزی براش درست نکردم

  6. #6

    نقل قول: کمک برای نوشتن کوئری

    نقل قول نوشته شده توسط mehdi0020 مشاهده تاپیک
    هنوز هیچ چیزی براش درست نکردم
    شما زحمت ساختن جداول را بکش برای کوئری کمک خواهیم کرد...

  7. #7

    نقل قول: کمک برای نوشتن کوئری

    نقل قول نوشته شده توسط farhad_shiri_ex مشاهده تاپیک
    شما زحمت ساختن جداول را بکش برای کوئری کمک خواهیم کرد...
    جدول ساختم
    اسکریبت بانک یا جدول نیاز دارید؟
    از tasks-->generate scripts تهیه کنم و اینجا کپیش کنم؟

  8. #8

    نقل قول: کمک برای نوشتن کوئری

    کسی نیست یه راهنماتی به من بکنه؟؟؟ کارم گیر این راه حله

  9. #9

    نقل قول: کمک برای نوشتن کوئری

    دوست عزیز این اسکریپت ها که فرستادی اصلا ربطی به درخواستی که در اولین پست دارید، ندارن ...
    در هر حال برای اجرای درخواست شما طبق تصویر زیر...
    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 های این اسکریپت کار نکردم
    آخرین ویرایش به وسیله farhad_shiri_ex : چهارشنبه 26 اردیبهشت 1397 در 18:38 عصر

  10. #10

    نقل قول: کمک برای نوشتن کوئری

    نقل قول نوشته شده توسط farhad_shiri_ex مشاهده تاپیک
    دوست عزیز این اسکریپت ها که فرستادی اصلا ربطی به درخواستی که در اولین پست دارید، ندارن ...
    در هر حال برای اجرای درخواست شما طبق تصویر زیر...
    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 های این اسکریپت کار نکردم
    سلام ضمن تشکر از وقتی که گذاشتید ورودی جدول من اون چیزی هست که در سوالم مطرح کردم لیست کالا و سازنده تماما در یک جدول وجود دارند
    در واقع جدول اطلاعات من دارای 5 فیلد هستش کدکالا نام کالا سازنده آدرس و تلفن

تاپیک های مشابه

  1. درخواست کمک برای نوشتن کوئری بین 3 جدول
    نوشته شده توسط shervinrv در بخش T-SQL
    پاسخ: 3
    آخرین پست: سه شنبه 25 شهریور 1393, 15:42 عصر
  2. كمك براي نوشت كوئري
    نوشته شده توسط nasrGod در بخش SQL Server
    پاسخ: 2
    آخرین پست: دوشنبه 19 مهر 1389, 23:23 عصر
  3. كمك در نوشتن كوئري
    نوشته شده توسط yalameh در بخش SQL Server
    پاسخ: 6
    آخرین پست: چهارشنبه 26 خرداد 1389, 11:34 صبح
  4. درخواست كمك براي يك كوئري
    نوشته شده توسط arsalansalar در بخش SQL Server
    پاسخ: 11
    آخرین پست: چهارشنبه 20 آبان 1388, 13:18 عصر
  5. درخواست كمك براي يك كوئري
    نوشته شده توسط arsalansalar در بخش دسترسی به داده ها (ADO.Net و LINQ و ...)
    پاسخ: 0
    آخرین پست: دوشنبه 18 آبان 1388, 10:30 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •