Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
| Author |
Topic |
|
panayiotis
Starting Member
16 Posts |
Posted - 2008-08-29 : 17:37:28
|
| Hello,I have the followin query in a store procedure and when i run it it return dublicate rows.SELECT DISTINCT JOB.*, (SELECT COMPANYLOGO FROM COMPANYPROFILE WHERE RECRUITERID=JOB.RECRUITERID AND RECRUITERID IN (SELECT RECRUITERID FROM RECRUITERPACKAGE WHERE PACKAGEID IN (SELECT PACKAGEID FROM PACKAGE WHERE DISPLAYLOGO=1))) AS LOGO,JOBTYPE.Name AS JOBTYPENAME, Sector.Name, ROW_NUMBER() OVER(ORDER BY JOB.PostDate DESC, JOB.JobID DESC) as RowNum FROM JOB INNER JOIN (JobSector INNER JOIN Sector ON JobSector.SectorID=Sector.SectorID)ON JOB.JOBID=JobSector.JOBID INNER JOIN JobType ON JOB.JobTypeID=JOBTYPE.JobTypeIDINNER JOIN JobLocation ON JobLocation.JOBID=JOB.JOBIDWHERE (JOB.Title Like '%a%')If i remove the ROW_NUMBER() OVER(ORDER BY JOB.PostDate DESC, JOB.JobID DESC) as RowNum it works fine but the problem is that ROW_NUMBER must be in the querry. Can you please suggest what may be the problem. Thanks in advance. |
|
|
tkizer
Almighty SQL Goddess
38200 Posts |
Posted - 2008-08-29 : 18:30:33
|
| You haven't provided enough information for us to help you with this. Sample data with expected result set would be very helpful.Tara KizerMicrosoft MVP for Windows Server System - SQL Serverhttp://weblogs.sqlteam.com/tarad/Subscribe to my blog |
 |
|
|
Bustaz Kool
Master Smack Fu Yak Hacker
1834 Posts |
Posted - 2008-08-29 : 18:41:16
|
| Wouldn't the ROW_NUMBER make each "repeating" row unique?Is there a way to use derived tables to get a "unique" record set and join it to your ROW_NUMBER information? something like:SELECT a.*, b.RowNumfrom (select distinct blah, blah from yadda where whatever ) ainner join (select ROW_NUMBER, keycol from yadda ) bon a.keycol = b.keycol=======================================Some people walk in the rain, others just get wet. -Roger Miller, musician (1936-1992) |
 |
|
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2008-08-30 : 02:25:57
|
quote: Originally posted by panayiotis Hello,I have the followin query in a store procedure and when i run it it return dublicate rows.SELECT DISTINCT JOB.*, (SELECT COMPANYLOGO FROM COMPANYPROFILE WHERE RECRUITERID=JOB.RECRUITERID AND RECRUITERID IN (SELECT RECRUITERID FROM RECRUITERPACKAGE WHERE PACKAGEID IN (SELECT PACKAGEID FROM PACKAGE WHERE DISPLAYLOGO=1))) AS LOGO,JOBTYPE.Name AS JOBTYPENAME, Sector.Name, ROW_NUMBER() OVER(ORDER BY JOB.PostDate DESC, JOB.JobID DESC) as RowNum FROM JOB INNER JOIN (JobSector INNER JOIN Sector ON JobSector.SectorID=Sector.SectorID)ON JOB.JOBID=JobSector.JOBID INNER JOIN JobType ON JOB.JobTypeID=JOBTYPE.JobTypeIDINNER JOIN JobLocation ON JobLocation.JOBID=JOB.JOBIDWHERE (JOB.Title Like '%a%')If i remove the ROW_NUMBER() OVER(ORDER BY JOB.PostDate DESC, JOB.JobID DESC) as RowNum it works fine but the problem is that ROW_NUMBER must be in the querry. Can you please suggest what may be the problem. Thanks in advance.
Can you explain what distinct values you're trying to retrive? Also why is unique row number generated if you're looking for distinct values? Please explain your full requirement with some sample data and show us your expected output out of them also. |
 |
|
|
panayiotis
Starting Member
16 Posts |
Posted - 2008-08-30 : 03:23:16
|
| Basically i am trying to make a store procedure to return paged results. This is a simple example of such procedure:CREATE PROCEDURE [dbo].[Article_GetALL]@startRowIndex int=0,@maximumRows int=-1ASBEGINIF @maximumRows is null OR @maximumRows < 1BEGIN SELECT * FROM Article ORDER BY ArticleID descEndELSEBEGIN SET @startRowIndex = @startRowIndex + 1 SELECT * FROM ( SELECT *, ROW_NUMBER() OVER(ORDER BY ArticleID desc) as RowNum FROM Article ) As TableA WHERE RowNum BETWEEN @startRowIndex AND (@startRowIndex + @maximumRows) - 1 ENDENDThe other one is a bit more complecated as it has to do some filtering as well as some sorting. The tables involved are:CREATE TABLE [dbo].[Job]( [JobID] [int] NOT NULL, [RecruiterID] [int] NOT NULL, [JobTypeID] [int] NOT NULL, [PriorityID] [int] NOT NULL, [Department] [nvarchar](150) NULL, [Title] [nvarchar](250) NOT NULL, [Description] [nvarchar](max) NOT NULL CONSTRAINT [PK_Job] PRIMARY KEY CLUSTERED ( [JobID] ASC)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]) ON [PRIMARY]GOALTER TABLE [dbo].[Job] WITH NOCHECK ADD CONSTRAINT [FK_Job_JobType] FOREIGN KEY([JobTypeID])REFERENCES [dbo].[JobType] ([JobTypeID])GOALTER TABLE [dbo].[Job] CHECK CONSTRAINT [FK_Job_JobType]GOALTER TABLE [dbo].[Job] WITH NOCHECK ADD CONSTRAINT [FK_Job_Priority] FOREIGN KEY([PriorityID])REFERENCES [dbo].[Priority] ([PriorityID])GOALTER TABLE [dbo].[Job] CHECK CONSTRAINT [FK_Job_Priority]GOALTER TABLE [dbo].[Job] WITH NOCHECK ADD CONSTRAINT [FK_Job_Recruiter] FOREIGN KEY([RecruiterID])REFERENCES [dbo].[Recruiter] ([RecruiterID])GOALTER TABLE [dbo].[Job] CHECK CONSTRAINT [FK_Job_Recruiter]--------------------CREATE TABLE [dbo].[JobType]( [JobTypeID] [int] NOT NULL, [Name] [nvarchar](150) NOT NULL, CONSTRAINT [PK_JobType] PRIMARY KEY CLUSTERED ( [JobTypeID] ASC)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]) ON [PRIMARY]---------------------CREATE TABLE [dbo].[JobSector]( [JobSectorID] [int] NOT NULL, [JobID] [int] NOT NULL, [SectorID] [int] NOT NULL, CONSTRAINT [PK_JobSector] PRIMARY KEY CLUSTERED ( [JobSectorID] ASC)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]) ON [PRIMARY] -------------------------------CREATE TABLE [dbo].[Sector]( [SectorID] [int] NOT NULL, [ParentID] [int] NULL, [Name] [nvarchar](50) NOT NULL, [Description] [nvarchar](500) NULL, [Keywords] [nvarchar](500) NULL, CONSTRAINT [PK_Sector] PRIMARY KEY CLUSTERED ( [SectorID] ASC)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]) ON [PRIMARY]GOALTER TABLE [dbo].[Sector] WITH NOCHECK ADD CONSTRAINT [FK_Sector_Sector] FOREIGN KEY([ParentID])REFERENCES [dbo].[Sector] ([SectorID])GOALTER TABLE [dbo].[Sector] CHECK CONSTRAINT [FK_Sector_Sector]---------------------------------CREATE TABLE [dbo].[JobLocation]( [JobLocationID] [int] NOT NULL, [JobID] [int] NOT NULL, [LocationID] [int] NOT NULL, CONSTRAINT [PK_JobLocation] PRIMARY KEY CLUSTERED ( [JobLocationID] ASC)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]) ON [PRIMARY]GOALTER TABLE [dbo].[JobLocation] WITH NOCHECK ADD CONSTRAINT [FK_JobLocation_Job] FOREIGN KEY([JobID])REFERENCES [dbo].[Job] ([JobID])GOALTER TABLE [dbo].[JobLocation] CHECK CONSTRAINT [FK_JobLocation_Job]GOALTER TABLE [dbo].[JobLocation] WITH NOCHECK ADD CONSTRAINT [FK_JobLocation_Location] FOREIGN KEY([LocationID])REFERENCES [dbo].[Location] ([LocationID])GOALTER TABLE [dbo].[JobLocation] CHECK CONSTRAINT [FK_JobLocation_Location]---------------------------------------CREATE TABLE [dbo].[Location]( [LocationID] [int] NOT NULL, [ParentID] [int] NULL, [Name] [nvarchar](50) NOT NULL, CONSTRAINT [PK_Location] PRIMARY KEY CLUSTERED ( [LocationID] ASC)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]) ON [PRIMARY]GOALTER TABLE [dbo].[Location] WITH NOCHECK ADD CONSTRAINT [FK_Location_Location] FOREIGN KEY([ParentID])REFERENCES [dbo].[Location] ([LocationID])GOALTER TABLE [dbo].[Location] CHECK CONSTRAINT [FK_Location_Location]--------------------------------Couble of other tables involved as well; COMPANYPROFILE, RECRUITERPACKAGE and PACKAGE but these dont affect my qry.As you can see in the statement:SELECT DISTINCT JOB.*, (SELECT COMPANYLOGO FROM COMPANYPROFILE WHERE RECRUITERID=JOB.RECRUITERID AND RECRUITERID IN (SELECT RECRUITERID FROM RECRUITERPACKAGE WHERE PACKAGEID IN (SELECT PACKAGEID FROM PACKAGE WHERE DISPLAYLOGO=1))) AS LOGO,JOBTYPE.Name AS JOBTYPENAME, Sector.Name, ROW_NUMBER() OVER(ORDER BY JOB.PostDate DESC, JOB.JobID DESC) as RowNum FROM JOB INNER JOIN (JobSector INNER JOIN Sector ON JobSector.SectorID=Sector.SectorID)ON JOB.JOBID=JobSector.JOBID INNER JOIN JobType ON JOB.JobTypeID=JOBTYPE.JobTypeIDINNER JOIN JobLocation ON JobLocation.JOBID=JOB.JOBIDWHERE (JOB.Title Like '%a%')I am trying to join the above tables and page the result as the sample store procedure does. but it returns dublicated rows because one job record can be associated with multible locations and multible job sectors. I dont know if i remove the PK from the joblocation and the jobsector if that makes any difference. I know that there i break normalization but it is not that important.The final store procedure looks something like this:CREATE PROCEDURE [dbo].[Job_AdvanceSearch]@TypeIDFilter varchar(50),@LocationIDFilter varchar(50),@SectorIDFilter varchar(50),@KeywordsFilter varchar(max),@SortBy varchar(max),@startRowIndex int=0,@maximumRows int=-1ASBEGINDECLARE @SQL nvarchar(max) IF @maximumRows is null OR @maximumRows < 1BEGINSET @SQL = 'SELECT DISTINCT JOB.*, (SELECT COMPANYLOGO FROM COMPANYPROFILE WHERE RECRUITERID=JOB.RECRUITERID AND RECRUITERID IN (SELECT RECRUITERID FROM RECRUITERPACKAGE WHERE PACKAGEID IN (SELECT PACKAGEID FROM PACKAGE WHERE DISPLAYLOGO=1))) AS LOGO, JOBTYPE.Name AS JOBTYPENAME, Sector.Name FROM JOB INNER JOIN (JobSector INNER JOIN Sector ON JobSector.SectorID=Sector.SectorID) ON JOB.JOBID=JobSector.JOBID INNER JOIN JobType ON JOB.JobTypeID=JOBTYPE.JobTypeID INNER JOIN JobLocation ON JobLocation.JOBID=JOB.JOBID WHERE (' + @KeywordsFilter + ')' IF @TypeIDFilter IS NOT NULL AND @TypeIDFilter <> '%' BEGIN SET @SQL = @SQL + 'AND JOB.JOBTYPEID IN (' + @TypeIDFilter + ')' END IF @LocationIDFilter IS NOT NULL AND @LocationIDFilter <> '%' BEGIN SET @SQL = @SQL + 'AND JobLocation.LocationID IN (' + @LocationIDFilter + ')' END IF @SectorIDFilter IS NOT NULL AND @SectorIDFilter <> '%' BEGIN SET @SQL = @SQL + 'AND Sector.SectorID IN (SELECT SectorID FROM SECTOR WHERE SECTORID IN (' + @SectorIDFilter + ') OR PARENTID IN (' + @SectorIDFilter + '))' END SET @SQL = @SQL + @SortBy EndELSEBEGIN SET @startRowIndex = @startRowIndex + 1 SET @SQL = 'SELECT * FROM ( SELECT DISTINCT JOB.*, (SELECT COMPANYLOGO FROM COMPANYPROFILE WHERE RECRUITERID=JOB.RECRUITERID AND RECRUITERID IN (SELECT RECRUITERID FROM RECRUITERPACKAGE WHERE PACKAGEID IN (SELECT PACKAGEID FROM PACKAGE WHERE DISPLAYLOGO=1))) AS LOGO, JOBTYPE.Name AS JOBTYPENAME, Sector.Name, ROW_NUMBER() OVER(' + @SortBy + ') as RowNum FROM JOB INNER JOIN (JobSector INNER JOIN Sector ON JobSector.SectorID=Sector.SectorID) ON JOB.JOBID=JobSector.JOBID INNER JOIN JobType ON JOB.JobTypeID=JOBTYPE.JobTypeID INNER JOIN JobLocation ON JobLocation.JOBID=JOB.JOBID WHERE (' + @KeywordsFilter + ')' IF @TypeIDFilter IS NOT NULL AND @TypeIDFilter <> '%' BEGIN SET @SQL = @SQL + 'AND JOB.JOBTYPEID IN (' + @TypeIDFilter + ')' END IF @LocationIDFilter IS NOT NULL AND @LocationIDFilter <> '%' BEGIN SET @SQL = @SQL + 'AND JobLocation.LocationID IN (' + @LocationIDFilter + ')' END IF @SectorIDFilter IS NOT NULL AND @SectorIDFilter <> '%' BEGIN SET @SQL = @SQL + 'AND Sector.SectorID IN (SELECT SectorID FROM SECTOR WHERE SECTORID IN (' + @SectorIDFilter + ') OR PARENTID IN (' + @SectorIDFilter + '))' END SET @SQL = @SQL + ') As TableA WHERE RowNum BETWEEN ' + (Convert(varchar(8000), @startRowIndex)) + ' AND (' + (Convert(varchar(8000), (@startRowIndex + @maximumRows))) + ') - 1' ENDPRINT @SQLEXEC sp_executesql @SQLEND Thanks in advance |
 |
|
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2008-08-30 : 03:49:53
|
if you want 1 record per jobid, then group by jobid while retrieving result. ALso in that case you can retrive only a single value for other fields so use MIN() or MAX() over them.ALso you dont need the if else condition you just need thisSET @SQL = 'SELECT * FROM (SELECT DISTINCT JOB.*, (SELECT COMPANYLOGO FROM COMPANYPROFILE WHERE RECRUITERID=JOB.RECRUITERID AND RECRUITERID IN (SELECT RECRUITERID FROM RECRUITERPACKAGE WHERE PACKAGEID IN (SELECT PACKAGEID FROM PACKAGE WHERE DISPLAYLOGO=1))) AS LOGO,JOBTYPE.Name AS JOBTYPENAME, Sector.Name, ROW_NUMBER() OVER(' + @SortBy + ') as RowNum FROM JOB INNER JOIN (JobSector INNER JOIN Sector ON JobSector.SectorID=Sector.SectorID)ON JOB.JOBID=JobSector.JOBID INNER JOIN JobType ON JOB.JobTypeID=JOBTYPE.JobTypeIDINNER JOIN JobLocation ON JobLocation.JOBID=JOB.JOBIDWHERE (' + @KeywordsFilter + ')' IF @TypeIDFilter IS NOT NULL AND @TypeIDFilter <> '%'BEGINSET @SQL = @SQL + 'AND JOB.JOBTYPEID IN (' + @TypeIDFilter + ')'ENDIF @LocationIDFilter IS NOT NULL AND @LocationIDFilter <> '%'BEGINSET @SQL = @SQL + 'AND JobLocation.LocationID IN (' + @LocationIDFilter + ')'END IF @SectorIDFilter IS NOT NULL AND @SectorIDFilter <> '%'BEGINSET @SQL = @SQL + 'AND Sector.SectorID IN (SELECT SectorID FROM SECTOR WHERE SECTORID IN (' + @SectorIDFilter + ') OR PARENTID IN (' + @SectorIDFilter + '))'END SET @SQL = @SQL +') As TableA WHERE (RowNum BETWEEN ' + (Convert(varchar(8000), @startRowIndex)) + ' AND (' + (Convert(varchar(8000), (@startRowIndex + @maximumRows))) + ') - 1) OR (@maximumRows is null OR @maximumRows < 1)' END...how will the values for @KeywordsFilter be passed? |
 |
|
|
panayiotis
Starting Member
16 Posts |
Posted - 2008-08-30 : 04:30:38
|
quote: Originally posted by visakh16 if you want 1 record per jobid, then group by jobid while retrieving result. ALso in that case you can retrive only a single value for other fields so use MIN() or MAX() over them.ALso you dont need the if else condition you just need thisSET @SQL = 'SELECT * FROM (SELECT DISTINCT JOB.*, (SELECT COMPANYLOGO FROM COMPANYPROFILE WHERE RECRUITERID=JOB.RECRUITERID AND RECRUITERID IN (SELECT RECRUITERID FROM RECRUITERPACKAGE WHERE PACKAGEID IN (SELECT PACKAGEID FROM PACKAGE WHERE DISPLAYLOGO=1))) AS LOGO,JOBTYPE.Name AS JOBTYPENAME, Sector.Name, ROW_NUMBER() OVER(' + @SortBy + ') as RowNum FROM JOB INNER JOIN (JobSector INNER JOIN Sector ON JobSector.SectorID=Sector.SectorID)ON JOB.JOBID=JobSector.JOBID INNER JOIN JobType ON JOB.JobTypeID=JOBTYPE.JobTypeIDINNER JOIN JobLocation ON JobLocation.JOBID=JOB.JOBIDWHERE (' + @KeywordsFilter + ')' IF @TypeIDFilter IS NOT NULL AND @TypeIDFilter <> '%'BEGINSET @SQL = @SQL + 'AND JOB.JOBTYPEID IN (' + @TypeIDFilter + ')'ENDIF @LocationIDFilter IS NOT NULL AND @LocationIDFilter <> '%'BEGINSET @SQL = @SQL + 'AND JobLocation.LocationID IN (' + @LocationIDFilter + ')'END IF @SectorIDFilter IS NOT NULL AND @SectorIDFilter <> '%'BEGINSET @SQL = @SQL + 'AND Sector.SectorID IN (SELECT SectorID FROM SECTOR WHERE SECTORID IN (' + @SectorIDFilter + ') OR PARENTID IN (' + @SectorIDFilter + '))'END SET @SQL = @SQL +') As TableA WHERE (RowNum BETWEEN ' + (Convert(varchar(8000), @startRowIndex)) + ' AND (' + (Convert(varchar(8000), (@startRowIndex + @maximumRows))) + ') - 1) OR (@maximumRows is null OR @maximumRows < 1)' END...how will the values for @KeywordsFilter be passed?
The call looks something like this:[Job_AdvanceSearch] '%', '%', '%', 'Title like ''%''', 'ORDER BY JOB.JOBID', 0,10I will be calling this from code.This is now works;ALTER PROCEDURE [dbo].[Job_AdvanceSearch]@TypeIDFilter varchar(50),@LocationIDFilter varchar(50),@SectorIDFilter varchar(50),@KeywordsFilter varchar(max),@SortBy varchar(max),@startRowIndex int=0,@maximumRows int=-1ASBEGINDECLARE @SQL nvarchar(max) SET @startRowIndex = @startRowIndex + 1 SET @SQL = 'SELECT * FROM ( SELECT DISTINCT MAX(JOB.JobID) AS JobID, MAX(JOB.RecruiterID) AS RecruiterID, MAX(JOB.JobTypeID) AS JobTypeID, MAX(JOB.PriorityID) AS PriorityID, MAX(JOB.Department) AS Department, MAX(JOB.Title) AS Title, MAX(JOB.Description) AS Description, MAX(JOB.CandidatesRequired) AS CandidatesRequired, MAX(JOB.MinSalary) AS MinSalary, MAX(JOB.MaxSalary) AS MaxSalary, MAX(JOB.DisplaySalary) AS DisplaySalary, MAX(JOB.Benefits) AS Benefits, MAX(JOB.StartDate) AS StartDate, MAX(JOB.Duration) AS Duration, MAX(JOB.Reference) AS Reference, MAX(JOB.PostDate) AS PostDate, MAX(JOB.ExpiredDate) AS ExpiredDate, MAX(JOB.Comments) AS Comments, (SELECT COMPANYLOGO FROM COMPANYPROFILE WHERE RECRUITERID=max(JOB.RECRUITERID) AND RECRUITERID IN (SELECT RECRUITERID FROM RECRUITERPACKAGE WHERE PACKAGEID IN (SELECT PACKAGEID FROM PACKAGE WHERE DISPLAYLOGO=1))) AS LOGO, MAX(JOBTYPE.Name) AS JOBTYPENAME, MAX(Sector.Name) AS SectorName, ROW_NUMBER() OVER(' + @SortBy + ') as RowNum FROM JOB INNER JOIN (JobSector INNER JOIN Sector ON JobSector.SectorID=Sector.SectorID) ON JOB.JOBID=JobSector.JOBID INNER JOIN JobType ON JOB.JobTypeID=JOBTYPE.JobTypeID INNER JOIN JobLocation ON JobLocation.JOBID=JOB.JOBID WHERE (' + @KeywordsFilter + ')' IF @TypeIDFilter IS NOT NULL AND @TypeIDFilter <> '%' BEGIN SET @SQL = @SQL + 'AND JOB.JOBTYPEID IN (' + @TypeIDFilter + ')' END IF @LocationIDFilter IS NOT NULL AND @LocationIDFilter <> '%' BEGIN SET @SQL = @SQL + 'AND JobLocation.LocationID IN (' + @LocationIDFilter + ')' END IF @SectorIDFilter IS NOT NULL AND @SectorIDFilter <> '%' BEGIN SET @SQL = @SQL + 'AND Sector.SectorID IN (SELECT SectorID FROM SECTOR WHERE SECTORID IN (' + @SectorIDFilter + ') OR PARENTID IN (' + @SectorIDFilter + '))' END SET @SQL=@SQL + ' GROUP BY JOB.JOBID' SET @SQL = @SQL + ') As TableA' -- WHERE (RowNum BETWEEN ' + (Convert(varchar(8000), @startRowIndex)) + ' AND (' + (Convert(varchar(8000), (@startRowIndex + @maximumRows))) + ') - 1) OR (' + @maximumRows + ' is null OR ' + @maximumRows + ' < 1)' PRINT @SQLEXEC sp_executesql @SQLEND I am a bit concern with the performance of this querry on a big database. Any suggestions? |
 |
|
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2008-08-30 : 05:14:24
|
| Why do you want the fileter condition to send like this?Title like ''%''', 'ORDER BY JOB.JOBID'...You could simply put the parameters for each field and also sortyby parameter where you pass only field name. in such case you can dispense with current dynamic sql and use a simple case construct for your filter. |
 |
|
|
panayiotis
Starting Member
16 Posts |
Posted - 2008-08-30 : 06:32:59
|
quote: Originally posted by visakh16 Why do you want the fileter condition to send like this?Title like ''%''', 'ORDER BY JOB.JOBID'...You could simply put the parameters for each field and also sortyby parameter where you pass only field name. in such case you can dispense with current dynamic sql and use a simple case construct for your filter.
Hmmm i am not sure if its going to work. I will give it a try.The other half of the problem has a similar issue now. The other part is a querry which should return the number of records the original querry returns.It looks like this:SELECT COUNT(*) FROM JOB INNER JOIN (JobSector INNER JOIN Sector ON JobSector.SectorID=Sector.SectorID) ON JOB.JOBID=JobSector.JOBID INNER JOIN JobType ON JOB.JobTypeID=JOBTYPE.JobTypeID INNER JOIN JobLocation ON JobLocation.JOBID=JOB.JOBID WHERE JOB.APPROVED=1 GROUP BY JOB.JOBID The result is:(No Column Name)22234Where as it should be 5. If i remove the GROUP BY JOB.JOBID the result is 13 because some jobs have more than one location and industry sector associated with them. Any ideas? |
 |
|
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2008-08-30 : 10:17:12
|
[code]SELECT COUNT(DISTINCT JOB.JOBID) FROM JOB INNER JOIN (JobSector INNER JOIN Sector ON JobSector.SectorID=Sector.SectorID)ON JOB.JOBID=JobSector.JOBID INNER JOIN JobType ON JOB.JobTypeID=JOBTYPE.JobTypeIDINNER JOIN JobLocation ON JobLocation.JOBID=JOB.JOBIDWHERE JOB.APPROVED=1GROUP BY JOB.JOBID[/code] |
 |
|
|
panayiotis
Starting Member
16 Posts |
Posted - 2008-08-30 : 11:46:27
|
quote: Originally posted by visakh16
SELECT COUNT(DISTINCT JOB.JOBID) FROM JOB INNER JOIN (JobSector INNER JOIN Sector ON JobSector.SectorID=Sector.SectorID)ON JOB.JOBID=JobSector.JOBID INNER JOIN JobType ON JOB.JobTypeID=JOBTYPE.JobTypeIDINNER JOIN JobLocation ON JobLocation.JOBID=JOB.JOBIDWHERE JOB.APPROVED=1GROUP BY JOB.JOBID
Thank you very much. |
 |
|
|
|
|
|
|
|