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

نام تاپیک: custom query

  1. #1

    Question custom query

    بسم الله الرحمن الرحیم
    با سلام
    رابطه بین دو جدول کالا و گروه n به n است بنابراین جدولی واسط بین اینها گرفتم که کدکالا و کدگروه در آن قرار دارد
    به ازای هر گروه کالا یه سطر اضافه می کند
    حالا من میخوام کوئری بزنم طوری که تمام گروه های یک کالا را در یک سطر بدهد نه در چند سطر
    چه جوری این کار را کنم؟

    کدکالا کدگروه
    1 5
    1 6

    خواسته من
    کدکالا کدگروه کدگروه
    1 5 6

    در ضمن هر کالایی تنها 2گروه داره
    آخرین ویرایش به وسیله مهدی هادیان2 : سه شنبه 04 بهمن 1390 در 10:11 صبح

  2. #2

    نقل قول: custom query

    اگر نعداد گروهها معلوم باشه به راحتی می تونید با چند تا ساب سلکت به منظورتون برسید.
    select goodcode, (select top 1 code from group where relation = goodrel), (select top 1 code from group where relation = goodrel order by 1 desc) from goodsTBL
    توابع تبدیل تاریخ با دقت 5000 سال
    پذیرش پروژه، کامپوننت، آموزش برنامه نویسی (دلفی، اس کیو ال، ..) -> 09123780840

    دوستای گلم حمایت کنید : https://cafebazaar.ir/app/com.nikanmehr.marmarxword/


    نرم افزار پخش مویرگی

  3. #3

    نقل قول: custom query

    نقل قول نوشته شده توسط You-See مشاهده تاپیک
    اگر نعداد گروهها معلوم باشه به راحتی می تونید با چند تا ساب سلکت به منظورتون برسید.
    select goodcode, (select top 1 code from group where relation = goodrel), (select top 1 code from group where relation = goodrel order by 1 desc) from goodsTBL
    با سلام
    ساب سلکتی که گفته بودید زدم ارور زیر رو می ده و هیچ چیز به عنوان نتیجه نشون نمی ده
    SubSelect.png

  4. #4

    نقل قول: custom query

    به این دلیله که top رو درست نگذاشتید.
    هردو باید top 1 باشند. دقیقا همون طور که نوشتم. یکی هم order باید داشته باشه.
    توابع تبدیل تاریخ با دقت 5000 سال
    پذیرش پروژه، کامپوننت، آموزش برنامه نویسی (دلفی، اس کیو ال، ..) -> 09123780840

    دوستای گلم حمایت کنید : https://cafebazaar.ir/app/com.nikanmehr.marmarxword/


    نرم افزار پخش مویرگی

  5. #5

    نقل قول: custom query

    نقل قول نوشته شده توسط You-See مشاهده تاپیک
    اگر نعداد گروهها معلوم باشه به راحتی می تونید با چند تا ساب سلکت به منظورتون برسید.
    select goodcode, (select top 1 code from group where relation = goodrel), (select top 1 code from group where relation = goodrel order by 1 desc) from goodsTBL
    میشه راجع به عملکردش توضیح بدید
    چه جوری (select top 1 code from group where relation = goodrel order by 1 desc) از ادامه سلکت قبلی کار رو دنبال می کنه و نمیره اولین رکورد رو بازیابی کنه؛ دومی رو می کنه
    لطفا راجع به تاپ هم توضیح بدید
    آیا در ساب سلکت تنها میشه از یک ستون سلکت گرفت
    در صورت منفی بودن پاسخ ارور زیر از چیست؟
    چون به هر حال من رکوردهایی دارم که نال باشند

    با تشکر
    آخرین ویرایش به وسیله مهدی هادیان2 : چهارشنبه 05 بهمن 1390 در 09:47 صبح

  6. #6
    کاربر دائمی آواتار Galawij
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    شاره که م سنه
    پست
    711

    نقل قول: custom query

    سلام،
    روش دیگه برای این کار استفاده از FOR XML PATH هست، به ساختار Query زیر توجه کنید:
    With Result AS (
    SELECT IdContractingCompanyProfile,ContactNumber,CompanyN ame
    FROM dbo.TbContractingCompanyContactNumbers INNER JOIN
    dbo.TbTypesContactNumbers ON
    dbo.TbContractingCompanyContactNumbers.Id_TypesCon tactNumbers = dbo.TbTypesContactNumbers.IdTypesContactNumbers INNER JOIN
    dbo.TbContractingCompanyProfile ON
    dbo.TbContractingCompanyContactNumbers.Id_Contract ingCompanyProfile = dbo.TbContractingCompanyProfile.IdContractingCompa nyProfile
    )
    SELECT IdContractingCompanyProfile,CompanyName,STUFF
    ((SELECT ', ' + CONVERT(nvarchar,Temp.ContactNumber)
    FROM Result Temp
    WHERE Result.IdContractingCompanyProfile=Temp.IdContract ingCompanyProfile FOR XML PATH('')), 1, 2, '') AS ContactNumber
    FROM Result
    Group By IdContractingCompanyProfile,CompanyName
    ORDER BY IdContractingCompanyProfi

    سه جدول داریم با نام های dbo.TbContractingCompanyContactNumbers و dbo.TbTypesContactNumbers و dbo.TbContractingCompanyProfile که به ازای هر شرکت چندین نوع شماره تماس داریم(ارتباط چند به چند). جستجو کنید متوجه می شید.

  7. #7

    نقل قول: custom query

    نقل قول نوشته شده توسط Galawij مشاهده تاپیک
    سلام،
    روش دیگه برای این کار استفاده از FOR XML PATH هست، به ساختار Query زیر توجه کنید:
    With Result AS (
    SELECT IdContractingCompanyProfile,ContactNumber,CompanyN ame
    FROM dbo.TbContractingCompanyContactNumbers INNER JOIN
    dbo.TbTypesContactNumbers ON
    dbo.TbContractingCompanyContactNumbers.Id_TypesCon tactNumbers = dbo.TbTypesContactNumbers.IdTypesContactNumbers INNER JOIN
    dbo.TbContractingCompanyProfile ON
    dbo.TbContractingCompanyContactNumbers.Id_Contract ingCompanyProfile = dbo.TbContractingCompanyProfile.IdContractingCompa nyProfile
    )
    SELECT IdContractingCompanyProfile,CompanyName,STUFF
    ((SELECT ', ' + CONVERT(nvarchar,Temp.ContactNumber)
    FROM Result Temp
    WHERE Result.IdContractingCompanyProfile=Temp.IdContract ingCompanyProfile FOR XML PATH('')), 1, 2, '') AS ContactNumber
    FROM Result
    Group By IdContractingCompanyProfile,CompanyName
    ORDER BY IdContractingCompanyProfi

    سه جدول داریم با نام های dbo.TbContractingCompanyContactNumbers و dbo.TbTypesContactNumbers و dbo.TbContractingCompanyProfile که به ازای هر شرکت چندین نوع شماره تماس داریم(ارتباط چند به چند). جستجو کنید متوجه می شید.
    از راهنمایی شما خیلی ممنون
    اگه براتون امکان داره راجع به ساب سلکت و تاپی که You_see فرمودن هم توضیحاتی بفرمائید
    البته همه دوستان مخاطب سوالم هستند

  8. #8

    نقل قول: custom query

    نقل قول نوشته شده توسط You-See مشاهده تاپیک
    اگر نعداد گروهها معلوم باشه به راحتی می تونید با چند تا ساب سلکت به منظورتون برسید.
    select goodcode, (select top 1 code from group where relation = goodrel), (select top 1 code from group where relation = goodrel order by 1 desc) from goodsTBL
    با سلام
    متوجه شدم که اگه موردی باشه که تنها یک گروه داشته باشه. این کوئری گروه دوم رو هم همون گروه اول میده
    چه جوری میشه این مشکل رو رفع کرد؟
    با تشکر

  9. #9

    نقل قول: custom query

    عرض کردم که اون برای مساله خاص شما بود.
    راه حل کلی استفاده از داینامیک کوئری هست (چون هر ردیف به ستون تبدیل می شه نمی شه از xml path استفاده کرد)
    می تونید موقتا برای رفع مشکل شرطی اضافه کنید که در صورت تک ردیفه بودن نال برگردونه.
    اما بعدها دوباره شرایط مجبورتون خواهد کرد که فکر اصولی تری کنید.
    اگر تمام ستونهای شما در یک ستون قابل ارائه بود xml path راه مناسبی هست.
    توابع تبدیل تاریخ با دقت 5000 سال
    پذیرش پروژه، کامپوننت، آموزش برنامه نویسی (دلفی، اس کیو ال، ..) -> 09123780840

    دوستای گلم حمایت کنید : https://cafebazaar.ir/app/com.nikanmehr.marmarxword/


    نرم افزار پخش مویرگی

  10. #10

    نقل قول: custom query

    سلام

    دوست عزیز یه جستجو برای Pivote بزن ... هم اینجا هم تو Help خود SQL

  11. #11

    نقل قول: custom query

    تا جایی که می دونم در Pivot باید تعداد فیلد ها معلوم باشه.
    توابع تبدیل تاریخ با دقت 5000 سال
    پذیرش پروژه، کامپوننت، آموزش برنامه نویسی (دلفی، اس کیو ال، ..) -> 09123780840

    دوستای گلم حمایت کنید : https://cafebazaar.ir/app/com.nikanmehr.marmarxword/


    نرم افزار پخش مویرگی

  12. #12

    نقل قول: custom query

    تعداد مقدارهایی که فیلدی که قراره به صورت ستون تعریف بشه باید مشخص باشه ... که اونم می شه با داینامیک TSQL ساخت ...

  13. #13

    نقل قول: custom query

    نقل قول نوشته شده توسط You-See مشاهده تاپیک
    عرض کردم که اون برای مساله خاص شما بود.
    راه حل کلی استفاده از داینامیک کوئری هست (چون هر ردیف به ستون تبدیل می شه نمی شه از xml path استفاده کرد)
    می تونید موقتا برای رفع مشکل شرطی اضافه کنید که در صورت تک ردیفه بودن نال برگردونه.
    اما بعدها دوباره شرایط مجبورتون خواهد کرد که فکر اصولی تری کنید.
    اگر تمام ستونهای شما در یک ستون قابل ارائه بود xml path راه مناسبی هست.
    با سلام
    از پاسختون ممنون
    اگه می شه بگید شرطش رو چه جوری بنویسم
    نمی دونم چه جوری تو ساب سلکت از if استفاده کنم
    با تشکر

  14. #14

    نقل قول: custom query

    این مثال رو توسعه بدید به منظورتون می رسید:

    declare @T table (SN int)
    insert into @T
    values(10)--, (20)
    select top 5 Osn,
    (selecttop 1 SN from @T),
    (select top 1 SN from @T group by SN having COUNT(1)= 2 order by SN desc)
    from TBL
    توابع تبدیل تاریخ با دقت 5000 سال
    پذیرش پروژه، کامپوننت، آموزش برنامه نویسی (دلفی، اس کیو ال، ..) -> 09123780840

    دوستای گلم حمایت کنید : https://cafebazaar.ir/app/com.nikanmehr.marmarxword/


    نرم افزار پخش مویرگی

  15. #15

    نقل قول: custom query

    نقل قول نوشته شده توسط You-See مشاهده تاپیک
    این مثال رو توسعه بدید به منظورتون می رسید:

    declare @T table (SN int)
    insert into @T
    values(10)--, (20)
    select top 5 Osn,
    (selecttop 1 SN from @T),
    (select top 1 SN from @T group by SN having COUNT(1)= 2 order by SN desc)
    from TBL
    با سلام
    با راهنمایی شما کد زیر رو زدم

    select
    CommodityCode,
    (
    SELECTTOP (1) dbo.TreeGroups.Title
    FROM dbo.TreeGroups INNERJOIN
    dbo.CommodityGroup ON dbo.TreeGroups.GroupCode = dbo.CommodityGroup.GroupCode
    WHERE (dbo.CommodityGroup.CommodityCode = dbo.Commodity.CommodityCode))AS PrimaryGroupName,
    (SELECTTOP (1) TreeGroups_1.Title
    FROM dbo.TreeGroups AS TreeGroups_1 INNERJOIN
    dbo.CommodityGroup AS CommodityGroup_1 ON TreeGroups_1.GroupCode = CommodityGroup_1.GroupCode
    groupby TreeGroups_1.Title
    havingCOUNT(TreeGroups_1.GroupCode)= 2

    )AS SubGroupName
    from Commodity

    ولی متاسفانه جواب نمی ده
    ستون دوم تمام سطرها رو برابر اون سطری می گیره که شامل 2 گروه است
    با تشکر

  16. #16

    نقل قول: custom query

    با سلام
    چه تابعی در sql وجود داره که مثلا سطر دوم یه جدول رو بده
    من مثال بالا رو نتونستم با top پیاده سازی کنم
    می خوام از یه راه دیگه برم
    با تشکر

  17. #17

    نقل قول: custom query

    با سلام
    دوستان اگه راه دیگه ای دارید؛ لطفا بفرمائید
    با تشکر

  18. #18
    کاربر دائمی آواتار in_chand_nafar
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    www.NikAmooz.com
    پست
    466

    نقل قول: custom query

    دوست عزیز مسئاله شما
    Pivots with Dynamic Columns in SQL Server


    http://www.simple-talk.com/community.../14/37265.aspx
    این یکی جالب یه SP برای اینکار ساخته
    http://www.sqlteam.com/article/dynam...s-pivot-tables

    http://sqlblogcasts.com/blogs/madhiv...rver-2005.aspx
    http://www.cftips.net/post.cfm/sql-p...ynamic-columns
    http://www.kodyaz.com/articles/t-sql...-examples.aspx
    امیدوارم با این لینک ها مشکلت حل بشه در صورتیکه مشکل حل نشد پیغام بده تا یه اسکریپت کوچولو و جمع جور برای اینکار داشتم که اون رو برات بفرستم

  19. #19
    کاربر دائمی آواتار in_chand_nafar
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    www.NikAmooz.com
    پست
    466

    نقل قول: custom query

    این اسکریپت جالب و کوچولو رو یه نگاه بیانداز رکوردها را با کاما میچین کنار هم از متغییری که دیتا داخل اون ذخیره شده می تونی توی Pivot استفاده کنید برای آشنایی با Pivot هم می توانید از مقاله های و سوال و جواب های موجود در سایت استفاده کنید

    USE NORTHWIND
    --تعداد مشتري هاي كليه كشور ها را بدست آوريد
    --IN توليد داده ها موجود در قسمت
    DECLARE @X NVARCHAR(MAX)
    SET @X=''
    SELECT @x=@x+ISNULL(Country,'')+',' FROM Customers GROUP BY Country
    PRINT @X
    SET @X =LEFT(@X,len(@X)-1) --حذف كاما آخر
    PRINT @X
    ---------------------------
    EXEC ('SELECT * FROM
    (SELECT Country,CustomerID FROM Customers) tmp
    PIVOT (COUNT(CustomerID) FOR Country
    IN ('+@X+')) AS pt')
    --خروجي دستور براي تفهيم بيشتر
    PRINT 'SELECT * FROM
    (SELECT Country,CustomerID FROM Customers) tmp
    PIVOT (COUNT(CustomerID) FOR Country
    IN ('+@x+')) AS pt'

  20. #20

    نقل قول: custom query

    نقل قول نوشته شده توسط in_chand_nafar مشاهده تاپیک
    دوست عزیز مسئاله شما
    Pivots with Dynamic Columns in SQL Server


    http://www.simple-talk.com/community.../14/37265.aspx
    این یکی جالب یه SP برای اینکار ساخته
    http://www.sqlteam.com/article/dynam...s-pivot-tables

    http://sqlblogcasts.com/blogs/madhiv...rver-2005.aspx
    http://www.cftips.net/post.cfm/sql-p...ynamic-columns
    http://www.kodyaz.com/articles/t-sql...-examples.aspx
    امیدوارم با این لینک ها مشکلت حل بشه در صورتیکه مشکل حل نشد پیغام بده تا یه اسکریپت کوچولو و جمع جور برای اینکار داشتم که اون رو برات بفرستم
    با سلام
    از پاسختون خیلی ممنون
    تا این جایی که بنده بررسی کردم این مورد جواب گوی مسئله من نیست
    برداشت من از pivot این بود که می توانم رکودهای موجود رو به عنوان هدر ستون ها در نظر بگیرم؛ در صورتی که من می خوام حالت زیر ایجاد شود
    کد کالا؛ کد گروه ؛ کد گروه
    1؛5؛6
    با تشکر

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

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