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 |
|
ChrisK1506
Starting Member
6 Posts |
Posted - 2011-08-22 : 11:36:28
|
| Hi, I am fairly new to SQL and I am having trouble with the following query, I get the error message "ORDER BY items must appear in the select list if the statement contains a UNION operator".Can anyone show me how to fix this error?ThanksSELECT (SELECT TOP 1 dbo.tblWorkFlowLog.Operation FROM dbo.tblWorkFlowLog WHERE (dbo.tblOrderLine.OrderLineId = dbo.tblWorkFlowLog.OrderLineId) ORDER BY WorkFlowLogId DESC) AS Operation,dbo.tblOrderLine.OrderLineStatus, dbo.tblOrderHeader.DateStamp,dbo.tblOrderHeader.UserRef, dbo.tblOrderHeader.SourceCode, dbo.tblOrderLine.OrderLineId, dbo.tblCustomer.Firstname,dbo.tblCustomer.Surname,CASEWHEN (dbo.tblCustomer.Firstname <> '') AND (dbo.tblCustomer.Firstname IS NOT NULL) THEN COALESCE (dbo.tblCustomer.Firstname + ' ', N'') + COALESCE (dbo.tblCustomer.Surname, N'') ELSECOALESCE (dbo.tblCustomer.Surname, N'') END as Name, dbo.tblCustomer.PostCode, dbo.tblOrderLine.BarCode, CONVERT (nvarchar(50), dbo.tblOrderLine.Quantity) + ' x ' + dbo.tblWebOrderLines.GroupProduct AS ProductCode,MAX(dbo.tblOrderLineOptions.CompletedDate) AS Printed, dbo.tblOrderLine.DespatchStatus,dbo.tblWebOrderLines.Id as WebOrderLineID, dbo.fnc_OrderLineIsReplacement(dbo.tblOrderLine.OrderLineId) AS IsReplacement FROM dbo.tblOrderLine LEFT OUTER JOIN dbo.tblWebOrderLines ON dbo.tblOrderLine.OrderLineId = dbo.tblWebOrderLines.OrderLineId LEFT OUTER JOIN dbo.tblOrderLineOptions ON dbo.tblOrderLine.OrderLineId = dbo.tblOrderLineOptions.OrderLineId LEFT OUTER JOIN dbo.tblOrderHeader ON dbo.tblOrderLine.OrderId = dbo.tblOrderHeader.OrderId LEFT OUTER JOIN dbo.tblCustomer ON dbo.tblOrderHeader.CustId = dbo.tblCustomer.CustId GROUP BY dbo.tblWebOrderLines.GroupProduct,dbo.tblOrderLine.OrderLineStatus, dbo.tblOrderHeader.DateStamp, dbo.tblOrderHeader.UserRef, dbo.tblOrderLine.OrderLineId, dbo.tblCustomer.Firstname, dbo.tblCustomer.Surname, dbo.tblCustomer.PostCode, dbo.tblOrderLine.BarCode, CONVERT (nvarchar(50), dbo.tblOrderLine.Quantity) + ' x ' + dbo.tblWebOrderLines.GroupProduct, dbo.tblOrderLine.DespatchStatus, dbo.tblOrderLineOptions.WorkFlowId, dbo.tblOrderHeader.SourceCode, dbo.tblOrderLine.ProductCode, dbo.tblWebOrderLines.Id HAVING (dbo.tblOrderLine.DespatchStatus IS NULL OR dbo.tblOrderLine.DespatchStatus = '') AND (dbo.tblOrderLineOptions.WorkFlowId = 3) AND (dbo.tblWebOrderLines.GroupProduct = 'RBCHC') union SELECT (SELECT TOP 1 dbo.tblWorkFlowLog.Operation, dbo.tblWorkFlowLog.WorkFlowLogId AS WorkFlowLogId FROM dbo.tblWorkFlowLog WHERE (dbo.tblOrderLine.OrderLineId = dbo.tblWorkFlowLog.OrderLineId) ORDER BY WorkFlowLogId DESC) AS Operation, dbo.tblOrderLine.OrderLineStatus, dbo.tblOrderHeader.DateStamp, dbo.tblOrderHeader.UserRef, dbo.tblOrderHeader.SourceCode, dbo.tblOrderLine.OrderLineId, dbo.tblCustomer.Firstname,dbo.tblCustomer.Surname,CASEWHEN (dbo.tblCustomer.Firstname <> '') AND (dbo.tblCustomer.Firstname IS NOT NULL) THEN COALESCE (dbo.tblCustomer.Firstname + ' ', N'') + COALESCE (dbo.tblCustomer.Surname, N'') ELSE COALESCE (dbo.tblCustomer.Surname, N'') END as Name, dbo.tblCustomer.PostCode, dbo.tblOrderLine.BarCode, CONVERT (nvarchar(50), dbo.tblOrderLine.Quantity) + ' x ' + dbo.tblWebOrderLines.GroupProduct AS ProductCode, MAX(dbo.tblOrderLineOptions.CompletedDate) AS Printed, dbo.tblOrderLine.DespatchStatus,dbo.tblWebOrderLines.Id as WebOrderLineID, dbo.fnc_OrderLineIsReplacement(dbo.tblOrderLine.OrderLineId) AS IsReplacement FROM dbo.tblOrderLine LEFT OUTER JOIN dbo.tblWebOrderLines ON dbo.tblOrderLine.OrderLineId = dbo.tblWebOrderLines.OrderLineId LEFT OUTER JOIN dbo.tblOrderLineOptions ON dbo.tblOrderLine.OrderLineId = dbo.tblOrderLineOptions.OrderLineId LEFT OUTER JOIN dbo.tblOrderHeader ON dbo.tblOrderLine.OrderId = dbo.tblOrderHeader.OrderId LEFT OUTER JOIN dbo.tblCustomer ON dbo.tblOrderHeader.CustId = dbo.tblCustomer.CustId GROUP BY dbo.tblWebOrderLines.GroupProduct,dbo.tblOrderLine.OrderLineStatus, dbo.tblOrderHeader.DateStamp, dbo.tblOrderHeader.UserRef, dbo.tblOrderLine.OrderLineId, dbo.tblCustomer.Firstname, dbo.tblCustomer.Surname, dbo.tblCustomer.PostCode, dbo.tblOrderLine.BarCode, CONVERT (nvarchar(50), dbo.tblOrderLine.Quantity) + ' x ' + dbo.tblWebOrderLines.GroupProduct, dbo.tblOrderLine.DespatchStatus, dbo.tblOrderLineOptions.WorkFlowId,dbo.tblOrderHeader.SourceCode, dbo.tblOrderLine.ProductCode, dbo.tblWebOrderLines.Id HAVING (dbo.tblOrderLine.DespatchStatus IS NULL OR dbo.tblOrderLine.DespatchStatus = '') AND (dbo.tblOrderLineOptions.WorkFlowId = 3)AND (dbo.tblWebOrderLines.GroupProduct = 'RBCIG') |
|
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2011-08-22 : 11:57:29
|
| [code]SELECT (SELECT TOP 1 dbo.tblWorkFlowLog.Operation,dbo.tblWorkFlowLog.WorkFlowLogId FROM dbo.tblWorkFlowLog WHERE (dbo.tblOrderLine.OrderLineId = dbo.tblWorkFlowLog.OrderLineId) ORDER BY WorkFlowLogId DESC) AS Operation,dbo.tblOrderLine.OrderLineStatus, dbo.tblOrderHeader.DateStamp,dbo.tblOrderHeader.UserRef, ...[/code]------------------------------------------------------------------------------------------------------SQL Server MVPhttp://visakhm.blogspot.com/ |
 |
|
|
ChrisK1506
Starting Member
6 Posts |
Posted - 2011-08-22 : 12:01:35
|
| Hi, Thanks for your reply, unfortunately that doesn't seem to work (I had already tried that)I now get the error "Only one expression can be specified in the select list when the subquery is not introduced with EXISTS" |
 |
|
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2011-08-22 : 12:11:12
|
why dont you use apply then?SELECT t.Operation,dbo.tblOrderLine.OrderLineStatus, dbo.tblOrderHeader.DateStamp,dbo.tblOrderHeader.UserRef, dbo.tblOrderHeader.SourceCode, dbo.tblOrderLine.OrderLineId, dbo.tblCustomer.Firstname,dbo.tblCustomer.Surname,CASEWHEN (dbo.tblCustomer.Firstname <> '') AND (dbo.tblCustomer.Firstname IS NOT NULL) THEN COALESCE (dbo.tblCustomer.Firstname + ' ', N'') + COALESCE (dbo.tblCustomer.Surname, N'') ELSECOALESCE (dbo.tblCustomer.Surname, N'') END as Name, dbo.tblCustomer.PostCode, dbo.tblOrderLine.BarCode, CONVERT (nvarchar(50), dbo.tblOrderLine.Quantity) + ' x ' + dbo.tblWebOrderLines.GroupProduct AS ProductCode,MAX(dbo.tblOrderLineOptions.CompletedDate) AS Printed, dbo.tblOrderLine.DespatchStatus,dbo.tblWebOrderLines.Id as WebOrderLineID, dbo.fnc_OrderLineIsReplacement(dbo.tblOrderLine.OrderLineId) AS IsReplacement FROM dbo.tblOrderLine CROSS APPLY (SELECT TOP 1 dbo.tblWorkFlowLog.Operation FROM dbo.tblWorkFlowLog WHERE (dbo.tblOrderLine.OrderLineId = dbo.tblWorkFlowLog.OrderLineId) ORDER BY WorkFlowLogId DESC)tLEFT OUTER JOIN dbo.tblWebOrderLines ON dbo.tblOrderLine.OrderLineId = dbo.tblWebOrderLines.OrderLineId LEFT OUTER JOIN dbo.tblOrderLineOptions ON dbo.tblOrderLine.OrderLineId = dbo.tblOrderLineOptions.OrderLineId LEFT OUTER JOIN dbo.tblOrderHeader ON dbo.tblOrderLine.OrderId = dbo.tblOrderHeader.OrderId LEFT OUTER JOIN dbo.tblCustomer ON dbo.tblOrderHeader.CustId = dbo.tblCustomer.CustId GROUP BY dbo.tblWebOrderLines.GroupProduct,dbo.tblOrderLine.OrderLineStatus, dbo.tblOrderHeader.DateStamp, dbo.tblOrderHeader.UserRef, dbo.tblOrderLine.OrderLineId, dbo.tblCustomer.Firstname, dbo.tblCustomer.Surname, dbo.tblCustomer.PostCode, dbo.tblOrderLine.BarCode, CONVERT (nvarchar(50), dbo.tblOrderLine.Quantity) + ' x ' + dbo.tblWebOrderLines.GroupProduct, dbo.tblOrderLine.DespatchStatus, dbo.tblOrderLineOptions.WorkFlowId, dbo.tblOrderHeader.SourceCode, dbo.tblOrderLine.ProductCode, dbo.tblWebOrderLines.Id HAVING (dbo.tblOrderLine.DespatchStatus IS NULL OR dbo.tblOrderLine.DespatchStatus = '') AND (dbo.tblOrderLineOptions.WorkFlowId = 3) AND (dbo.tblWebOrderLines.GroupProduct = 'RBCHC') union SELECT t.Operation, dbo.tblOrderLine.OrderLineStatus, dbo.tblOrderHeader.DateStamp, dbo.tblOrderHeader.UserRef, dbo.tblOrderHeader.SourceCode, dbo.tblOrderLine.OrderLineId, dbo.tblCustomer.Firstname,dbo.tblCustomer.Surname,CASEWHEN (dbo.tblCustomer.Firstname <> '') AND (dbo.tblCustomer.Firstname IS NOT NULL) THEN COALESCE (dbo.tblCustomer.Firstname + ' ', N'') + COALESCE (dbo.tblCustomer.Surname, N'') ELSE COALESCE (dbo.tblCustomer.Surname, N'') END as Name, dbo.tblCustomer.PostCode, dbo.tblOrderLine.BarCode, CONVERT (nvarchar(50), dbo.tblOrderLine.Quantity) + ' x ' + dbo.tblWebOrderLines.GroupProduct AS ProductCode, MAX(dbo.tblOrderLineOptions.CompletedDate) AS Printed, dbo.tblOrderLine.DespatchStatus,dbo.tblWebOrderLines.Id as WebOrderLineID, dbo.fnc_OrderLineIsReplacement(dbo.tblOrderLine.OrderLineId) AS IsReplacement FROM dbo.tblOrderLine CROSS APPLY (SELECT TOP 1 dbo.tblWorkFlowLog.Operation FROM dbo.tblWorkFlowLog WHERE (dbo.tblOrderLine.OrderLineId = dbo.tblWorkFlowLog.OrderLineId) ORDER BY WorkFlowLogId DESC)t LEFT OUTER JOIN dbo.tblWebOrderLines ON dbo.tblOrderLine.OrderLineId = dbo.tblWebOrderLines.OrderLineId LEFT OUTER JOIN dbo.tblOrderLineOptions ON dbo.tblOrderLine.OrderLineId = dbo.tblOrderLineOptions.OrderLineId LEFT OUTER JOIN dbo.tblOrderHeader ON dbo.tblOrderLine.OrderId = dbo.tblOrderHeader.OrderId LEFT OUTER JOIN dbo.tblCustomer ON dbo.tblOrderHeader.CustId = dbo.tblCustomer.CustId GROUP BY dbo.tblWebOrderLines.GroupProduct,dbo.tblOrderLine.OrderLineStatus, dbo.tblOrderHeader.DateStamp, dbo.tblOrderHeader.UserRef, dbo.tblOrderLine.OrderLineId, dbo.tblCustomer.Firstname, dbo.tblCustomer.Surname, dbo.tblCustomer.PostCode, dbo.tblOrderLine.BarCode, CONVERT (nvarchar(50), dbo.tblOrderLine.Quantity) + ' x ' + dbo.tblWebOrderLines.GroupProduct, dbo.tblOrderLine.DespatchStatus, dbo.tblOrderLineOptions.WorkFlowId,dbo.tblOrderHeader.SourceCode, dbo.tblOrderLine.ProductCode, dbo.tblWebOrderLines.Id HAVING (dbo.tblOrderLine.DespatchStatus IS NULL OR dbo.tblOrderLine.DespatchStatus = '') AND (dbo.tblOrderLineOptions.WorkFlowId = 3)AND (dbo.tblWebOrderLines.GroupProduct = 'RBCIG') ------------------------------------------------------------------------------------------------------SQL Server MVPhttp://visakhm.blogspot.com/ |
 |
|
|
Kristen
Test
22859 Posts |
Posted - 2011-08-22 : 12:15:57
|
Move the sub-select outside the UNION perhaps perhaps?SELECT SELECT (SELECT TOP 1 dbo.tblWorkFlowLog.Operation FROM dbo.tblWorkFlowLog WHERE (X.OrderLineId = dbo.tblWorkFlowLog.OrderLineId) ORDER BY WorkFlowLogId DESC) AS Operation, *FROM( SELECT dbo.tblOrderLine.OrderLineStatus, ... FROM dbo.tblOrderLine ... GROUP BY dbo.tblWebOrderLines.GroupProduct, ... HAVING (dbo.tblOrderLine.DespatchStatus IS NULL ... UNION SELECT dbo.tblOrderLine.OrderLineStatus, ... FROM dbo.tblOrderLine ... GROUP BY dbo.tblWebOrderLines.GroupProduct, ... HAVING (dbo.tblOrderLine.DespatchStatus IS NULL ...) AS X |
 |
|
|
|
|
|
|
|