Microsoft SQL Server中出错

时间:2017-08-09 11:54:09

标签: sql sql-server

您能否建议发生语法错误?

当我在Oracle中运行此代码时,我没有错,但在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;

3 个答案:

答案 0 :(得分:0)

如果您希望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; 中的行包含两行,其中一行是body{ background: red; background: -webkit-linear-gradient(left top, red, yellow); background: -o-linear-gradient(bottom right, red, yellow); background: -moz-linear-gradient(bottom right, red, yellow); background: linear-gradient(to bottom right, red, yellow); },那么您可以执行以下操作:

<svg width="400" height="300">
  <defs>
    <mask id="hole">
      <rect width="100%" height="100%" fill="white"/>
      <rect x="200" y="100" width="100" height="100"/>
    </mask>
  </defs>
  
  <image width="400" height="300"
         xlink:href="http://lorempixel.com/400/300/sports/"
         mask="url(#hole)"/>
</svg>

这将在一行中返回两个类别。

答案 1 :(得分: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;

将[COLUMNS HERE]替换为您要选择的列。

答案 2 :(得分:0)

这在我尝试代码时起作用,它需要第一个FROM的名称。

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;