PDA

View Full Version : استفاده همزمان از Group by و Order by



Leila-2011
پنج شنبه 10 مرداد 1392, 11:01 صبح
سلام
چطوری میتونم یه order by به کوئری زیر اضافه کنم :




declare @SubQueriesPlaceHolder varchar(50)
declare @FiltersPlaceHolder varchar(500)
declare @Qry varchar(max)
declare @SubQueries varchar(max)
declare @Filters varchar(max)

set @Filters = @RepInx;


select @SubQueriesPlaceHolder = '<SubQrueries>',
@FiltersPlaceHolder = '<Filters>',
@Qry = 'select PPA_ID,RepInx,AssembleCode,Counter,PartCode,QcInsC ode,OperatorID' + @SubQueriesPlaceHolder + char(13) + ' from [QC-TempTable] A where RepInx in (' + @FiltersPlaceHolder + ')',
@SubQueries = ''


select @SubQueries += CHAR(13) + ',(SELECT max(PPA_PropertyValue) from [QC-ProcessPropertiesPerAssemble] where PPA_PropertyTitle = ''' + PPA_PropertyTitle + ''') as [' + PPA_PropertyTitle + ']'
from [QC-ProcessPropertiesPerAssemble] WHERE PPA_ProjID=@ProjID AND PPA_ProcID=@ProcID
GROUP BY PPA_PropertyTitle


set @Qry = REPLACE(@Qry, @SubQueriesPlaceHolder, @SubQueries)
set @Qry = REPLACE(@Qry, @FiltersPlaceHolder, @Filters)

exec(@Qry)

Leila-2011
پنج شنبه 10 مرداد 1392, 12:34 عصر
در واقع پرینت query بالا میشه این :



select PPA_ID,RepInx,AssembleCode,Counter,PartCode,QcInsC ode,OperatorID
,(SELECT max(PPA_PropertyValue) from [QC-ProcessPropertiesPerAssemble] where PPA_PropertyTitle = 'Heat Input') as [Heat Input]
,(SELECT max(PPA_PropertyValue) from [QC-ProcessPropertiesPerAssemble] where PPA_PropertyTitle = 'Visual Check') as [Visual Check]
,(SELECT max(PPA_PropertyValue) from [QC-ProcessPropertiesPerAssemble] where PPA_PropertyTitle = 'Tolerance') as [Tolerance]
from [QC-TempTable] A where RepInx in (1058)

محمد سلیم آبادی
پنج شنبه 10 مرداد 1392, 18:32 عصر
قبل از اینکه کد رو exec کنید دستور order by را در قالب رشته به آن متغیر الحاق کنید. در کد زیر به جای column_name نام ستونی یا ستون هایی که میخواهید بر اساس آنها مرتب سازی شکل بگیرد قرار دهید:

SET @Qry += ' ORDER BY column_name '
exec(@Qry)

Leila-2011
شنبه 12 مرداد 1392, 07:26 صبح
این قسمت از کوئری بالا یه عمل pivot رو انجام میده من میخام فقط خروجی این قسمت order by بشه نه خروجی کل کوئری که وقتی به شیوه ای که گفتین عمل میکنم باز ارور میده :


select @SubQueries += CHAR(13) + ',(SELECT max(PPA_PropertyValue) from [QC-ProcessPropertiesPerAssemble] where PPA_PropertyTitle = ''' + PPA_PropertyTitle + ''') as [' + PPA_PropertyTitle + ']'
from [QC-ProcessPropertiesPerAssemble] WHERE PPA_ProjID=@ProjID AND PPA_ProcID=@ProcID
GROUP BY PPA_PropertyTitle

مسئله خیلی حیاتیه ، کمک کنید ممنون میشم

محمد سلیم آبادی
شنبه 12 مرداد 1392, 15:22 عصر
یک order by بعد از group by قرار بدین در کد پست قبل. مشکل چیه؟
کدی شبیه به این:

GROUP BY PPA_PropertyTitle
ORDER BY PPA_PropertyTitle

Leila-2011
یک شنبه 13 مرداد 1392, 07:06 صبح
Group by و Order by با هم بهم ارور میده :
PPA_Priority" is invalid in the ORDER BY clause because it is not contained in either an aggregate function or the GROUP BY clause.

محمد سلیم آبادی
یک شنبه 13 مرداد 1392, 08:46 صبح
وقتی گروه بندی میکنید تنها بر اساس ستون هایی که جلوی group by اوردین میتونید مرتب سازی کنید...

Leila-2011
یک شنبه 13 مرداد 1392, 10:43 صبح
ولی من نمیخام گروه بندیم بر اساس اون فیلد باشه داده هام بهم میریزن، چیکار کنم یعنی هیچ راه حلی نداره ؟؟؟؟