2017-08-09 87 views
-2

您能否建议在哪里出现语法错误?在Microsoft SQL Server中发生错误

当我运行在甲骨文这个代码,我没有错,但在Microsoft SQL Server我赶上与语法连接错误“不远的地方”

在此先感谢您的帮助

select 
    a.orderlinenumber, b.categorytype 
from 
    (select * 
    from 
     (select * 
      from Anton 
      where OrderLineNumber in (select OrderLineNumber 
            from Anton 
            group by OrderLineNumber 
            having COUNT (CategoryType) = 2)) 
    where CategoryType = 'Money back') a 
right join 
    (select * 
    from 
     (select * 
      from Anton 
      where OrderLineNumber in (select OrderLineNumber 
            from Anton 
            group by OrderLineNumber 
            having COUNT (CategoryType) = 2)) 
    where 
     CategoryType <> 'Money back') b on a.OrderLineNumber = b.OrderLineNumber; 
+1

你需要'select'之后和'from'之前的东西。你可以考虑用样本数据和期望的结果提出另一个问题,并解释你想要做什么。可能有一个更简单的方法。 –

+0

您的SUBQUERY SELECT缺少列名称 – theDbGuy

回答

0

你缺少你选择列,你也应该别名两个子查询:

select a.orderlinenumber, 
     b.categorytype 
from 
(
     select [COLUMNS HERE] 
     from (
     SELECT [COLUMNS HERE] 
     FROM Anton 
     WHERE OrderLineNumber IN (SELECT OrderLineNumber FROM Anton GROUP BY OrderLineNumber HAVING COUNT (CategoryType)=2) 
     ) AS ab 
     where CategoryType = 'Money back' 
) AS a 
right join 
(
     select [COLUMNS HERE] 
     from (
     SELECT [COLUMNS HERE] 
     FROM Anton 
     WHERE OrderLineNumber IN (SELECT OrderLineNumber FROM Anton GROUP BY OrderLineNumber HAVING COUNT (CategoryType)=2) 
     ) AS ac 
     where CategoryType <> 'Money back' 
) AS b on a.OrderLineNumber=b.OrderLineNumber; 

与您要选择的列替换[柱这里。

0

如果你想在anton行有两排,其中一个是'Moneyback',那么你可以做这样的事情:

SELECT OrderLineNumber, MIN(CategoryType), MAX(CategoryType) 
FROM Anton 
GROUP BY OrderLineNumber 
HAVING COUNT(*) = 2 AND 
     SUM(CASE WHEN CategoryType = 'Moneyback' THEN 1 ELSE 0 END) = 1; 

这将retur n单行上的两个类别。

0

这工作时,我试过的代码,它需要一个名字的第一个从。

select a.orderlinenumber,b.categorytype from 
(
select* from (SELECT* FROM Anton 
WHERE OrderLineNumber IN (SELECT OrderLineNumber FROM Anton 
GROUP BY OrderLineNumber HAVING COUNT (CategoryType)=2)) AS a 
where CategoryType = 'Money back')a 

right join 

(
select * from (SELECT * FROM Anton 
WHERE OrderLineNumber IN (SELECT OrderLineNumber FROM Anton 
GROUP BY OrderLineNumber HAVING COUNT (CategoryType)=2)) AS b 
where CategoryType <> 'Money back')b 

on a.OrderLineNumber=b.OrderLineNumber; 
相关问题